- ベストアンサー
csvファイルのデータ変換について
OS:windows2000pro VB:VB6.0sp5 c:\data.csv(カンマ区切) のデータ(全6列)で 1列目,2列目,3列目,4列目,5列目,6列目 [変換前(全6列)] abc,a1,aあ b2,3c,4d5e (1行目) ccc,c3,aあ い,3c,4d5e (2行目) bbc,b2,あ b2a,c3,d5e4 (3行目) [変換後(全6列)] abc,a1,"aあ b2",3c,"4d5e" (1行目) ccc,c3,"aあ い",3c,"4d5e" (2行目) bbc,b2,"あ b2a",c3,"d5e4" (3行目) 上記の様に 3列,6列目を「"・・・"」ダブルコーテイションで 囲い(変換し)、c:\data_after.csvというファイル名で 保存する為のプログラムをご教示ください よろしくお願いいたします
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
Dim fso, inf, outf, aLine, field Set fso = CreateObject("Scripting.FileSystemObject") Set inf = fso.OpenTextFile("c:\data.csv",1) Set outf = fso.OpenTextFile("c:\data_after.csv",2,true) Do until inf.AtEndOfStream aLine = inf.ReadLine field = split(aLine,",") 'カンマでフィールドに分ける field(2)="""" & field(2) & """" field(4)="""" & field(4) & """" aline = join(field,",") outf.WriteLine(aline) Loop inf.Close outf.Close
その他の回答 (3)
- gu-tarou
- ベストアンサー率42% (6/14)
質問は Data.csv から データを読込み 3列,6列目をダブルコーテイションで囲いdata_after.csvに保存。 と言う事ですかね。 Da$="aあ b2" Print #1, ","; Chr$(34); Da$; Chr$(34); とすれば、「,"aあ b2"」とprint 出来ます。 これで良いのでは。
- imogasi
- ベストアンサー率27% (4737/17069)
昔のDOS-Basic時代からWRITE #という出力ステートメントがあって、VBでも使えるはずです。文字列は””で囲ってくれるので都合がよいのですが、改行が終わりに入ってしまうので使えないようです。 変換前は、例ではSPLIT関数で5列の扱いとなり 3,5、列に””を囲うことになります。配列では2,4番目ですね。 あと復帰改行を毎行入れることですね。 参考例 本当はaはLine Inputで代入される文字列。 Sub test04() a = "a,b,c,d,r,f" st = Split(a, ",") s = "" For i = 0 To UBound(st) If i = 3 Or i = 5 Then s = s & "," & """" & st(i) & """" Else s = s & "," & st(i) End If Next MsgBox s End Sub
- JeanneNet
- ベストアンサー率48% (100/208)
こんにちは、じゃんぬねっと です。 まるまる教えるのは楽しくないので、ちょっと考え方だけ。 InStr 関数を使うと、検索文字の位置を返すことができます。 これを利用して、2 回目のカンマを取得し、 その後に ダブルクォーテーション ("""") を付加。 さらに、2 回目のカンマの位置から InStr を実行し、 次のカンマの前にも、ダブルクォーテーション ("""") を付加。 # Split 関数を使って Join で戻す方法が 1 番簡単そうではありますが。 これらをファイルに書き込む。