miyapiのひとりごと

blogこと始め。コンピュータと映画、そしてお酒の好きなmiyapiが気ままに書きつづる日記。。。

【VB Script】CSVファイルの読み込み

2016-07-03 11:43:16 | Weblog

CSVを VBScript でちょっと加工したい時に、split(",", hoge ) とついやりたくなるが、

項目中に 「,」があると意外にやっかいである。たとえばこんなケース。。

<やっかいなCSVの例>
A, B, "C,D,E" , F  

これをフツーに Split すると「A」、「B」、「"C」、「D」、「E"」

などと分割されてしまう。


てなわけで、「A」、「B」、「C,D,E」となるようにスクリプトを書いてみた。
実際にやってみると、文字コードやら、途中に2バイト文字があった場合やら、
これまた意外に面倒なことが分かったので、下記のようなベタなコードにした。

ということで、メモ代わりに貼っておきます。
好きに使ってね。。

なんのことはない、最初に文字列を調べて、" と "の間だけ区切り文字を別のもの( {} など)に
置き換えているだけです。。文字コードが UTF-8 やら unicode やらがきても対応できるよう、
テキストの読み込みにはストリームオブジェクトを使いました。これってとっても便利!

---------------------------------------------------------------------------

Const strInFile = "test.txt"

Dim intLc, intFlg, intDummy, chrC, strOutBuf, strWriteBuf

Dim ArrWriteBuf

Dim objInFile

Set objInFile = CreateObject("ADODB.Stream")

With objInFile

   .Type    = 2

   .Charset = "unicode"

   .Open

   .LoadFromFile = strInFile

End With

Dim strLine

Do until objInFile.EOS

strLine = objInFile.ReadText(-2)

  intFlg = 0

  strOutBuf = ""

  For intLc = 1 to Len(strLine)

    chrC = Mid(strLine, intLc, 1)

    If intFlg = 1 Then

       Select Case chrC

         Case """"

           intFlg = 0

           strOutBuf = strOutBuf & chrC

         Case ","

           strOutBuf = strOutBuf & "{}"

         Case Else

           strOutBuf = strOutBuf & chrC

       End Select

    Else

       Select Case ChrC

         Case """"

           intFlg = 1

           strOutBuf = strOutBuf & chrC

         Case Else

           strOutBuf = strOutBuf & chrC

       End Select

    End If

  Next  

  WScript.Echo strOutBuf

  ArrWriteBuf = Split(strOutBuf,",")

  strWriteBuf = Replace( ArrWriteBuf(0), "{}", "," )

  For intLc = 1 to Ubound(ArrWriteBuf)

      strWriteBuf = strWriteBuf & "," & Replace( ArrWriteBuf(intLc), "{}", "," )

  Next

  WScript.Echo strWriteBuf

Loop

objInFile.Close

Set objInFile = Nothing

 


最新の画像もっと見る

コメントを投稿