プロが教えるわが家の防犯対策術!

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というファイル名で
保存する為のプログラムをご教示ください
よろしくお願いいたします

A 回答 (4件)

こんにちは、じゃんぬねっと です。


まるまる教えるのは楽しくないので、ちょっと考え方だけ。

InStr 関数を使うと、検索文字の位置を返すことができます。
これを利用して、2 回目のカンマを取得し、
その後に ダブルクォーテーション ("""") を付加。
さらに、2 回目のカンマの位置から InStr を実行し、
次のカンマの前にも、ダブルクォーテーション ("""") を付加。

# Split 関数を使って Join で戻す方法が 1 番簡単そうではありますが。

これらをファイルに書き込む。
    • good
    • 0

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
    • good
    • 0

昔の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
    • good
    • 0

質問は


Data.csv から データを読込み 3列,6列目をダブルコーテイションで囲いdata_after.csvに保存。

と言う事ですかね。

Da$="aあ b2"

Print #1, ","; Chr$(34); Da$; Chr$(34);

とすれば、「,"aあ b2"」とprint 出来ます。

これで良いのでは。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!