|
いつも楽しくスクリプトの勉強をさせていただいております。 さっそくなのですがまた不明な点が出てきたため皆様にお教えいただきたく思います。
実施したい内容 txtとCSVファイルの双方の最初のカンマにC1という文字があり、その文字を起点として CSVファイルを検索し、該当するものがあればtxtの後ろにくっつける。
************ TXTファイルの内容 C1,りんご DC1,ごりら ************
************ CSVの内容 C1,果物 DC1,動物 ************
結果 DC1というものがあればC1より優先して該当してしまうことがあります。 これではりんごが動物となってしまうので、完全一致の文字のみ抽出 なければ無視と徹底することはできないのでしょうか? 勉強不足でもうしわけないですがお教えください。 何卒よろしくお願いいたします。
//FOPENなどは省略しております。
REPEAT Dim LINE_DATA2 = FGET(FILE_ID2,CTR2) PRINT CTR2 + ":" + LINE_DATA2 BUHIN_TENSUU[CTR2] = LINE_DATA2 CTR2 = CTR2 + 1 UNTIL LINE_CTR2 = CTR2
Dim FILE_ID = FOPEN("C:\部品データ\" + FILE_NAME,F_READ OR F_WRITE) Dim LINE_CTR = FGET(FILE_ID,F_LINECOUNT)
Dim CTR1 = 1 REPEAT Dim LINE_DATA = FGET(FILE_ID,CTR1) Dim TARGET_POS = POS(",",LINE_DATA) Dim SEARCH_DATA = COPY(LINE_DATA,0,TARGET_POS) Dim ADD_DATA = "" Dim CTR3 = 0 REPEAT Dim LINE_DATA3 = BUHIN_TENSUU[CTR3] Dim DATA_EXIST = POS(SEARCH_DATA,LINE_DATA3) IFB DATA_EXIST <> 0 THEN ADD_DATA = CHGMOJ(LINE_DATA3,SEARCH_DATA,"") CTR3 = CTR2 PRINT SEARCH_DATA + ":" + ADD_DATA ELSE CTR3 = CTR3 + 1 ENDIF UNTIL LINE_CTR2 = CTR3
IFB ADD_DATA <> "" THEN LINE_DATA = LINE_DATA + "," + ADD_DATA PRINT LINE_DATA FPUT(FILE_ID,LINE_DATA,CTR1) ENDIF CTR1 = CTR1 + 1 UNTIL CTR1 = LINE_CTR FCLOSE(FILE_ID)
|
No.1258 2015/05/14(Thu) 20:35:43
|
☆ Re: vlookupのようなファイル結合についてお教えください。 / ある |
|
|
vlookupがうろ覚えなので、解釈が違っていたらごめんなさい。 ↓の処理はtxtの1行目の「.」までを切り出してcsvの1〜最終行までの「.」までに 一致するものを探し、txtとcsvの各「.」までが一致していたらtxtの最後に追加を していくようにしてあります。 意味が違ったらどうしようかとドキドキ…。
---------------------------------------------
textblock txt c1.りんご dc1.ごりら endtextblock
textblock csv c1.果物 dc1.動物 endtextblock
ptxt=txt txtline=split(txt,"<#cr>") csvline=split(csv,"<#cr>")
for n=0 to resize(txtline) serch_data=copy(txtline[n],0,pos(".",txtline[n])-1) for i=0 to resize(csvline) ifb pos(serch_data,csvline[n])>=1 then pos_data=copy(csvline[i],0,pos(".",csvline[i])-1) ifb serch_data=pos_data then print txtline[n]+"と"+csvline[i]+"が一致" ptxt=ptxt+"<#cr>"+csvline[i] endif endif next next sen="---------------------------" print sen+"<#cr>↓一致したものを追加したテキスト<#cr>"+sen print ptxt
|
No.1259 2015/05/15(Fri) 00:09:48
|
|
☆ Re: vlookupのようなファイル結合についてお教えください。 / ミジンコ |
|
|
おはようございます。 あるさん早速の御回答ありがとうございます。 例をごちゃごちゃと足してみたりして検証しましたが 完璧にVLOOKUP機能ですね。 まさかできるとはおもっていませんでした。 しかもこんなに短い。。。 自分の記載がはずかしくなります(><)ポッ
教えていただいた内容をもとに結合ファイルが できるよう加工していきます。 本当にありがとうございます。m(__)m
|
No.1260 2015/05/15(Fri) 09:28:28
|
|
☆ Re: vlookupのようなファイル結合についてお教えください。 / ある |
|
|
意味を取り違えてなくて良かったです。 「c1」を検索して「dc1」まで拾ってしまうのは条件文にpos「のみ」を使っているからで、 ifb word_a=word_b then とすれば完全一致になります。
もう少し複雑な条件を入れようと思ったら、andやorを使うとかなり細かい設定が可能です。 ifb (pos("aaa",str)>=1 and pos("bbb",str)<1) or length(str)>=100 then ↑(strにaaaが含まれており、bbbが含まれていない)もしくは(strが100文字以上)
またregexpを使えば正規表現もでき、かなり幅の広いことができるようになります。 興味があれば「uwsc 正規表現」などでググってみて下さい。
もしまだ触ったことがなければslctbox、inputなども取り入れていくと世界が広がりますよ。 それなりに複雑な作業もボタンをポチポチ押していくだけであっさりと処理できるようになり、 日常の定型作業が驚異的な効率で片付くようになります。 (今回の例で言うならば、テキストの指定やワードの指定をinputで行い、 処理の内容をvlookup,hlookupなど複数用意しておくとか)
|
No.1261 2015/05/15(Fri) 10:55:59
|
|
☆ Re: vlookupのようなファイル結合についてお教えください。 / ミジンコ |
|
|
あるさんへ いろいろとお教えいただきありがとうございます。 正規表現を見てみましたが知恵熱がでました。。。 わたしにはまだ早すぎたようです。。。
本業がプログラムとは無縁なので少しずつ勉強させていただきます。 本当にありがとうございました。
|
No.1262 2015/05/15(Fri) 11:15:00
|
|