会社行きたくなかったんです。

自由になりたくて会社辞めました

VB.net

VB.netでCSVファイルのダブルクォーテーションの中のカンマを取り除く方法

更新日:

カンマ区切りのCSVファイルの場合、文字列をダブルクォーテーションで囲んである場合があります。
VB.netにはCSVファイルを解読する機能がないようです。

スポンサーリンク

こんな感じのファイルがあると困ります。

"abc,de","fghij","klmno"

列の項目ごとに分けて配列に格納する時に、カンマで分けると、abcとdeが分かれてしまいます。

こういう場合は、「","」を一旦、「*<>*」といった、ファイルに含まれないような文字列に置換してから、「,」を削除し、「*<>*」→「","」とすることで回避できます。

-「","」→「*<>*」
"abc,de*<>*fghij*<>*klmno"-「,」→「」
"abcde*<>*fghij*<>*klmno"-「*<>*」→「","」
"abcde","fghij","klmno"

列が全て文字列ならこれで問題ないのですが、数字が混ざると困ります。
こういうファイルがあった場合の処理を考えてみました。

"abc,d,e","",1,,"fghij,","klmno"

文字列はダブルクォーテーションでくくり、数字はくくらない。
文字列空欄と数字の空欄も含めるようにしました。

カンマを半角スペースに変換するコードです。

        Dim strLine As String
        Dim strTempLine As String
        Dim strTemp() As String
        Dim stColumn() As String

        strLine = """abc,d,e"","""",1,,""fghij,"",""klmno"""

        strTemp = strLine.Split(",")

        For i = 0 To UBound(strTemp) - 1
            If strTemp(i) = "" Then
                strTempLine &= strTemp(i) & ","
            ElseIf strTemp(i) = """" Then
                '「"」は、最後がカンマで終わる文字列があったことを意味する
                strTempLine &= strTemp(i) & ","
            ElseIf strTemp(i) = """""" Then
                strTempLine &= strTemp(i) & ","
            ElseIf strTemp(i).StartsWith("""") = True And strTemp(i).EndsWith("""") = False Then
                '「"」から始まる場合は、半角スペースでつなぐ
                strTempLine &= strTemp(i) & " "
            ElseIf strTemp(i).IndexOf("""") = -1 And Not IsNumeric(strTemp(i)) Then
                strTempLine &= strTemp(i) & " "
            Else
                strTempLine &= strTemp(i) & ","
            End If
        Next
        strTempLine &= strTemp(UBound(strTemp))

        'カンマで分割できるようになりました。
        stColumn = strTempLine.Split(",")

-VB.net

Copyright© 自由になりたくて会社辞めました , 2024 AllRights Reserved Powered by AFFINGER4.