| 
|  | いつも楽しくスクリプトの勉強をさせていただいております。 さっそくなのですがまた不明な点が出てきたため皆様にお教えいただきたく思います。
 
 実施したい内容
 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 |  |