|
お世話になります。 CSV区切りのファイルに
2023,3,1,"新規","20230215-0001",5,"箱No1,No2",1000
が保存されている時(実際は数万件あります) たまに品名に半角カンマ「,」が含まれており品名は ダブルクォーテーションで囲まれているのですが 数値などはダブルクォーテーションが付いていません。 SPLITを使うと品名まで分かれてしまいます。 1文字目で処理分けすると分けられるのですが件数が多い為に遅いです。 もう少しスッキリ早く終わるような方法はないでしょうか? エクセルで開くと正しく読み込んでくれます(凄いですね) 以下コードです。
print "SPLITを使って区切りを,にした場合" FID = fopen("data.csv",F_READ) data = fget(FID,1) FCLOSE(fid) 配列 = SPLIT(data,",")
for i = 0 to length(配列)-1 print 配列[i] next
print "-------------------------------------" print "1文字目で処理分けする" data2 = data while 0 < POS(",",data2) //data2の一文字目が" if "<#DBL>" = copy(data2,1,1) then DBL = pos("<#DBL>",data2,2) //2個目の"を探す print copy(data2,2,DBL-2) data2 = copy(data2,DBL+2) //取得した分を消去
else CAN = pos(",",data2) //,位置を探す print copy(data2,1,CAN-1) data2 = copy(data2,CAN+1) //取得した分を消去 endif wend print data2
-----結果----- SPLITを使って区切りを,にした場合 2023 3 1 "新規" "20230215-0001" 5 "箱No1 No2" 1000 ------------------------------------- 1文字目で処理分けする 2023 3 1 新規 20230215-0001 5 箱No1,No2 1000
|
No.1576 2023/03/19(Sun) 04:46:19
|
☆ Re: CSV区切りのファイルを正しく区切って呼び出したい / stuncloud |
|
|
|
fgetがcsvに対応しているのでそれを使うのが一番簡単なのではないでしょうか
fid = fopen("data.csv", F_READ) for i = 1 to fget(fid, F_LINECOUNT) col = 0 while TRUE col = col + 1 value = fget(fid, i, col) // 第三引数で列を指定 if length(value) = 0 then // 値が空であればループを抜ける // このサンプルでは空の列があることを考慮していません break else print value endif wend next fclose(fid)
// 出力 2023 3 1 新規 20230215-0001 5 箱No1,No2 1000
ちなみにUWSCRであればsplit()でCSV分割ができるようになっているので以下のように書けます
fid = fopen("data.csv", F_READ) for i = 1 to fget(fid, F_LINECOUNT) row = fget(fid, i) // 第5引数TRUEでCSV扱い、この場合第3第4引数は無視される csv = split(row, ",",,, TRUE) for value in csv print value next next fclose(fid)
// 出力 2023 3 1 新規 20230215-0001 5 箱No1,No2 1000
|
No.1577 2023/03/19(Sun) 11:46:15
|
|