CSVからデータを読み込んで
1つのレコード?の項目数をチェックしようと思ってます。
input #fileno,strbuff
だと1項目ずつ最後まで続けて読み込んで1レコードの項目数が
分かりませんでした。
line input #fileno, strbuff
a = split(strbuff,",")
だとstrbuff内に","があればおかしくなってしまいました。
なにかいい案あるでしょうか。
ん〜と、ソースをそのまま出せればいいのだが
--
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
普段から使っている関数です。
宣言部を忘れてた。
Public Function gfSplitCSV(ByVal str As String) As String()
Excelがはいってる環境なら、
Office Web ComponentsのMS SpreadSheetコントロール貼り付けて、
Spreadsheet1.LoadText App.Path & "\Test1.csv", ",", , """"
とかすれば、セル分割して読んでくれますから、
あとは煮て食うなり焼いて食うなり・・・。
いなさん,Sayさん どうもありがとうございます。
大変参考になりました。
わざわざコードまで記述してくれて分かりやすかったです。
また,不明な点がでてきた時はよろしくお願いします。
ツイート | ![]() |