CSVの項目の数をしるには

解決


めがね  2005-02-08 00:58:05  No: 88299

CSVからデータを読み込んで
1つのレコード?の項目数をチェックしようと思ってます。

input #fileno,strbuff
だと1項目ずつ最後まで続けて読み込んで1レコードの項目数が
分かりませんでした。

line input #fileno, strbuff
a = split(strbuff,",")
だとstrbuff内に","があればおかしくなってしまいました。

なにかいい案あるでしょうか。


いな  2005-02-08 01:34:15  No: 88300

ん〜と、ソースをそのまま出せればいいのだが
--
    Dim i           As Integer
    Dim work        As String
    Dim letter      As String
    Dim chrDQ       As String
    Dim chrDQDQ     As String
    Dim fgDQ        As Boolean
    Dim strDummy(0) As String
    
    '初期設定
    work = ""
    letter = ""
    chrDQ = Chr(34) 'ダブルクォート
    chrDQDQ = Chr(34) & Chr(34) '二重ダブルクォート
    fgDQ = False
    
    For i = 1 To Len(str)
        letter = Mid(str, i, 1)
        If letter = chrDQ Then
            '文字がダブルクォートの場合
            If fgDQ = True Then
                '項目がダブルクォートで囲まれている場合
                
                If Mid(str, (i + 1), 1) = "," Or Mid(str, (i + 1), 1) = "" Then
                    '次の文字がカンマ、または次の文字がない場合
                    
                    '項目の終わりを示すダブルクォート
                    fgDQ = False
                    
                ElseIf Mid(str, (i + 1), 1) = chrDQ Then
                    '次の文字がダブルクォートの場合
                    
                    'エスケープ文字と項目に含まれるダブルクォート文字
                    work = work & letter
                    i = i + 1
                Else
                    'その他の文字の場合
                    
                    '項目に含まれるダブルクォート文字がエスケープされていない?
                    '文字列は分割不可能な1つの項目と解釈し、受け取った文字列をそのまま返して終了
                    strDummy(0) = str
                    gfSplitCSV = strDummy
                    Exit Function
                End If
            Else
                '項目の先頭を表すダブルクォート
                fgDQ = True
                
            End If
        
        ElseIf letter = "," Then
            '文字がカンマの場合
            
            If fgDQ Then
                '項目がダブルクォートで囲まれている場合
                
                '項目に含まれるカンマ文字
                work = work & letter
                
            Else
                '項目を囲むダブルクォートの外、つまり区切り文字としてのカンマの場合
                
                'タブ文字に変換
                work = work & vbTab
                
            End If
            
        Else
            'それ以外の場合
            '項目に含まれる文字
            work = work & letter
            
        End If
    Next
    
    gfSplitCSV = Split(work, vbTab)
    
End Function

普段から使っている関数です。


いな  2005-02-08 01:35:05  No: 88301

宣言部を忘れてた。

Public Function gfSplitCSV(ByVal str As String) As String()


Say  2005-02-08 03:12:37  No: 88302

Excelがはいってる環境なら、
Office Web ComponentsのMS SpreadSheetコントロール貼り付けて、
Spreadsheet1.LoadText App.Path & "\Test1.csv", ",", , """"
とかすれば、セル分割して読んでくれますから、
あとは煮て食うなり焼いて食うなり・・・。


めがね  2005-02-08 03:32:59  No: 88303

いなさん,Sayさん  どうもありがとうございます。
大変参考になりました。

わざわざコードまで記述してくれて分かりやすかったです。
また,不明な点がでてきた時はよろしくお願いします。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加