HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
0203
やまねこファイル名禁止文字(\/:*?"<>|)の大文字置換7解決


やまねこ

リンク

2009/2/3(Tue) 01:38:58|NO.23194

こんにちは
題名通りなのですが、windowsのファイル名禁止文字(\/:*?"<>|)を大文字に置換するアルゴリズムがわからなくて困っています。
peek,pokeをつかってだいぶ泥臭いやり方でならできたのですがあまりに汚いので、もっとスマートな(スクリプトがきれいな)方法などご存じでしたら教えていただけないでしょうか。
あと、""内で文字として宣言する場合、\を付ける必要があるのは\と"だけなのでしょうか?
よろしくお願いします。



この記事に返信する


SYAM

リンク

2009/2/3(Tue) 14:29:30|NO.23196

以前、別の質問(複数のキーワードを検索する方法)への回答のひとつとして書いたスクリプトを応用した例を貼ります。


#define INTMAX 0x7ffffff src = "abcedfghijklmnopqrstuvwxyz" sdim dest,1024 chars = "abcdefg" words = "abcdefg" nb_char = strlen(chars) dim charidx,nb_char search_end=0 repeat nb_char c=cnt : index=0 gosub *GET_NEXTINDEX : charidx(cnt)=i loop *CUTTING_NEXT wait 1 if(search_end<nb_char){ nextidx=INTMAX repeat nb_char if(charidx(cnt)<nextidx){ nextidx=charidx(cnt) minidx=cnt } loop dest += strmid(src, idx, nextidx-idx) + strmid(words,minidx*2,2) idx=nextidx+1 repeat nb_char if(charidx(cnt)=nextidx){ c=cnt : index=idx gosub *GET_NEXTINDEX : charidx(cnt)=i } loop goto *CUTTING_NEXT } dest+=strmid(src, idx, INTMAX) //表示 mes dest stop // サブルーチン *GET_NEXTINDEX i=instr(src, index, strmid(chars,c,1)) if i<0 : i=INTMAX:search_end++:return i=index+i:return

また、\ 記号については、
 プログラミング・マニュアル
の、
 2.スクリプト記述の基本

 文字列
にあります。 



faretttg

リンク

2009/2/3(Tue) 14:59:57|NO.23197

なぁSYAMさん、ちゃんとスレ主の文章読めよ。
「わからない」といいながら「泥臭い方法でなら出来た」って書いているだろうが。
あんたはスレ主の嘘でまかせにまんまとだまされてるんだよ。

「出来た」のに「わからない」というのはどういうことだ?
どうせ出来てないんだろ????
「できた」けど「泥臭い」からもっといい方法を教えてくれといいながら、
本当はわからなくて出来なくて、最初からいい方法が知りたいんだろ。んでそれをコピペして使うつもりなんだよな??

初心者が思いつきそうな浅知恵だな。


やみねこさん、あんたが出来たっていう泥臭い方法もアルゴリズムのひとつだから。
できたっていうんならそれ見せてくれよ。



s

リンク

2009/2/3(Tue) 15:22:55|NO.23198

faretttgさんも名前をちゃんと読まれた方がいいかと・・・



Hiroaki Software

リンク

2009/2/3(Tue) 17:30:33|NO.23199

sさん
>faretttgさんも名前をちゃんと読まれた方がいいかと・・・
ただの入力ミスだと思うのですが・・・・・・・

やまねこさん
>peek,pokeをつかってだいぶ泥臭いやり方でならできたのですがあまりに汚いので、もっとスマートな(スクリプト
>がきれいな)方法などご存じでしたら教えていただけないでしょうか。

できたソーススクリプトを見せてください。
ただし、行数が多いのは直接記述しないでください。
見る方は見る気をなくすので・・・・・

そこでHP持っていないようなのでアドバイスする

行数が多いのについては、オンラインストレージ等(Windows Live Sky Drive等)を
利用してファイルを渡すといいでしょう。



やまねこ

リンク

2009/2/3(Tue) 18:31:17|NO.23200

SYAMさん
複数検索できるとは素晴らしいですね!
destをつかって移していくという発想がなかった…
参考にさせていただきます。本当にありがとうございます。

faretttgさん
ご指摘ありがとうございます。確かに自分のを示しておくべきでした。
ただ、sさんも指摘されているように「やみねこ」とありますが、私は「やまねこ」です。
(Hiroaki Softwareのおっしゃるようにタイプミスならいいんですが)
実際にやみねこさんもいっらしゃいますが、彼は関係ありませんので…^^;

Hiroaki Softwareさん
同じくご指摘ありがとうございます。一応下に私のを貼っておきます。
あと、Windows Live Sky Driveについてのアドバイス、ありがとうございます。
また機会があれば利用させていただきます。


今朝もう少し簡潔に書けるスクリプトを思いついたので、貼っておきます。
自己解決(?)したような形になりましたが、SYAMさんのスクリプトは非常に参考になりました。
みなさんありがとうございました。

before="\\\\\\/\\:\\*\\?\\\"\\\<\\\>\\\|"
after="¥/:*?”<>|"
repeat 9
newcom oReg, "VBScript.RegExp" : comres title_clip
oReg("Pattern")=strmid(before,cnt*2,2) : oReg("Global")= 1
oReg->"Replace" title_clip,strmid(after,cnt*2,2) : delcom oReg
loop
(なんだかCOMオブジェクトをつかっているので姑息な気もしますが…)



やまねこ

リンク

2009/2/3(Tue) 18:33:20|NO.23201

すいません、言い忘れていましたが上のスクリプトはtitle_clipという文字列型変数をファイル名として使えるように整形するものです。



あら

リンク

2009/2/3(Tue) 22:00:22|NO.23203

Hiroaki Software。こいつまだいたのか^^;



ONION software Copyright 1997-2021(c) All rights reserved.