おはようございます。
VB6.0使ってます。
よろしくお願いします。
csvファイルの項目数を数えたいのですが、新・旧レコードの2つが混ざっており、項目数も違います。項目にはデータだけでなく空もあります。
例:
001,suzuki,19800101,,tokyo,F
002,tanaka,19800202,A
新は項目が6あるが
旧は4つしかない。
時々、項目には空も混ざっている。
For文で数えてみようとしたのですが、旧だと項目数が足りないので数えられないですねf^^;
同様に6番目があるかないかとかアホウなことも考えましたがこれも無理でした。
アドバイス、ヒント、ツッコミ、よろしければお願いいたします。
No.4ベストアンサー
- 回答日時:
Splitを使うと、カンマ区切り(その他でもできますが)のデータを
分解することができます。
分解したデータを格納した配列の要素数を取得すれば、項目数がわかるのでは?
参考までに、以下にサンプルとしてコードを記します。
(エラー処理などは特につけてません。)
ミスがあったらごめんなさい('';)
Public Sub ReadFile()
Dim strFilename As String
Dim intFileNo As Integer
Dim blnOpenFlg As Boolean
Dim vntBuf As Variant
Dim strBuf As String
Dim lngCnt As Long
Dim lngDataCnt As Long
'初期値設定
blnOpenFlg = False
'ファイル名設定
strFilename = "C:\TEST.csv"
intFileNo = FreeFile()
'ファイルオープン
Open strFilename For Input As #intFileNo
'ファイルオープンしたらフラグOn
blnOpenFlg = True
lngCnt = 1
Do While Not EOF(intFileNo)
'データを一行単位で読込
Line Input #intFileNo, strBuf
'Splitをつかって、取り出した文字列を分解
vntBuf = Split(strBuf, ",")
'要素数を取得
lngDataCnt=uBound(vntBuf)+1
MsgBox Cstr(lngcnt) & "行目の項目数は" & Cstr(lngDataCnt) & "個です。"
lngCnt = lngCnt + 1
Loop
'ファイルを閉じる
If blnOpenFlg = True Then
Close #intFileNo
blnOpenFlg = False
End If
End Sub
この回答への補足
この場をお借りしてお礼を言わせて頂きます。
皆様のおかげで出来上がりました(^-^)
ポイントは均等に入れたいところですが、#2と#4の方をメインにブレンドして作らせていただいたので今回はお二方にポイントを入れておきます。
本当にありがとうございました(^-^)
お返事ありがとうございます!
おお、VBにもsplitあったんですね!
Javaを少ししていたので知ってはいたのですが…
VBにもsplitが…
あ、借りたVBの本が4.0でした!
そりゃ載ってねえって話ですよねf^^;
No.2
- 回答日時:
項目数ですと、次のようにして求めることが可能です。
Private Sub コマンド0_Click()
Dim I As Integer
Dim N As Integer
Dim Datas() As String
Datas() = FileReadArray("c:\temp\vbtest.csv")
N = UBound(Datas())
For I = 0 To N
MsgBox CharCount(Datas(I), ",") + 1
Next I
End Sub
なお、ここでは、FileReadArray()、CharCount()関数を利用しています。
Public Function FileReadArray(ByVal FileName As String) As String()
On Error GoTo Err_FileReadArray
Dim fso As FileSystemObject
Dim fil As File
Dim txs As TextStream
Dim strText As String
Dim strTexts() As String
Set fso = New FileSystemObject
Set fil = fso.GetFile(FileName)
Set txs = fil.OpenAsTextStream(ForReading, TristateUseDefault)
strText = txs.ReadAll
strTexts = Split(strText, Chr$(13) & Chr$(10))
Exit_FileReadArray:
FileReadArray = strTexts()
Exit Function
Err_FileReadArray:
MsgBox Err.Description & "(FileReadArray)", vbExclamation, " 関数エラーメッセージ"
strTexts() = Split("")
Resume Exit_FileReadArray
End Function
Public Sub ErrMessage(ByVal CnnErrors As ADODB.Error, ByVal strSQL As String)
MsgBox "ADOエラーが発生しましたので処理をキャンセルします。" & Chr$(13) & Chr$(13) & _
"・Err.Description=" & CnnErrors.Description & Chr$(13) & _
"・Err.Number=" & CnnErrors.Number & Chr$(13) & _
"・SQL State=" & CnnErrors.SQLState & Chr$(13) & _
"・SQL Text=" & strSQL, _
vbExclamation, " ADO関数エラーメッセージ"
End Sub
Public Function CharCount(ByVal Text As String, ByVal C As String) As Integer
Dim I As Integer
Dim L As Integer
Dim N As Integer
L = Len(Text)
For I = 1 To L
N = N + Abs(StrComp(Mid$(Text, I, 1), C, vbTextCompare) = 0)
Next I
CharCount = N
End Function
No.1
- 回答日時:
ちょっと正式なやり方がわからないのですが、俺だったら1行丸ごと読み込み","の数を数えます。
後は応用で何とかなるかな?と思います。
サンプルプログラムとして、
Open "test.csv" For Input As #1
Line Input #1, l_in
Close #1
cnt = 0
text_len = 0
Do
text_len = InStr(text_len + 1, l_in, ",")
cnt = cnt + 1
Loop While (text_len > 0)
Label1.Caption = cnt
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- その他(プログラミング・Web制作) Windowsのバッチファイルについてご教示ください 5 2023/07/25 20:23
- その他(プログラミング・Web制作) Pythonで、データファイルと列名ファイルを1つのファイルにしたいです。 1 2023/07/27 20:29
- Excel(エクセル) 列を自動で追加したい 3 2022/07/11 12:58
- Visual Basic(VBA) VBAで、1つのエクセルで、2つのシートからもう1つのシートに条件のある転記コードを教えてください。 1 2023/03/16 18:07
- Visual Basic(VBA) Excel VBA マクロ ホルダー内にある複数のファイルを規則に従い格納をしたいです 4 2022/11/19 10:58
- その他(データベース) Excel VBA 転記について 1 2022/04/20 16:55
- 英語 自動詞のhopeについて 5 2023/03/12 02:34
- その他(Microsoft Office) (至急)Googleのスプレッドシートの条件付き書式について 2 2022/09/11 08:50
- Visual Basic(VBA) VBAを使いシート間で貼り付け 3 2023/03/14 20:53
このQ&Aを見た人はこんなQ&Aも見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
【Excel VBA】CSV取込時、数字の先頭の0を消えないようにするには?
Excel(エクセル)
-
VBAでCSVファイルが使用中かどうかの確認
Visual Basic(VBA)
-
マクロ CSVファイル取込 最終行、最終列の取得
Visual Basic(VBA)
-
-
4
Excel csv保存 列数が異なる場合に、余分にカンマをつけない(ヘッダとデータの列数を変える)
Excel(エクセル)
-
5
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
6
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
7
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
8
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
9
VBAでCSVをExcelに取り込む時に、途中の改行を取り除くには
Visual Basic(VBA)
-
10
【VBA】テキストファイルを指定行数からの読み込み
Visual Basic(VBA)
-
11
【VB.NET】App.configにファイルパスを設定して読み込みたい
Microsoft ASP
-
12
【ExcelVBA】各セルをダブルクォーテーションで括ってCSV保存したい
Visual Basic(VBA)
-
13
アクセス VBAについて FROM句の構文エラー
Access(アクセス)
-
14
VB.NETで DataRow()を利用して、値からコードを取得したい。
Visual Basic(VBA)
-
15
エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの
Excel(エクセル)
-
16
csvファイルを列数ごとに分割するExcelマクロが書けずに困っています
Visual Basic(VBA)
-
17
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
18
CloseとDisposeの違い
Visual Basic(VBA)
-
19
変数を動的に作るには?
Visual Basic(VBA)
-
20
Integer変数をカラにしたいのですが
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
カンマ区切りのCSVファイルから...
-
複数のcsvファイルをExcelに一...
-
csvファイルでの日付設定「yyyy...
-
csvファイルのデータの一部を取...
-
csvファイル 項目数取得
-
エクセルVBA 大容量CSVファイル...
-
マクロから出力されるcsvのダブ...
-
バッチでCSVを処理する時、空の...
-
CSV形式での保存時に”文字列...
-
csvファイルのデータの間引きを...
-
PHP.laravelについて
-
Windowsのバッチファイルについ...
-
VBAでCSVファイルのインポート...
-
csvファイルを列数ごとに分割す...
-
VBAでCSVファイルのデータを集...
-
c#でcsvから指定の1行だけを読...
-
Access でVBSコードで、CSVファ...
-
エクセル形式のファイルの読み込み
-
ASPでDBから抽出した結果をCSV...
-
巨大なCSVの加工(指定列のみの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
カンマ区切りのCSVファイルから...
-
複数のcsvファイルをExcelに一...
-
CSV形式での保存時に”文字列...
-
csvファイル 項目数取得
-
csvファイルでの日付設定「yyyy...
-
マクロから出力されるcsvのダブ...
-
csvファイルを列数ごとに分割す...
-
バッチでCSVを処理する時、空の...
-
データ解析ソフトRでのファイル...
-
【ExcelVBA】UTF-8の文字コード...
-
エクセルVBA 大容量CSVファイル...
-
特定文字を入ってるCSVの特定の...
-
CSVファイルの項目行を削除...
-
【C#】パス名で無効な文字
-
CSVファイル作成
-
COBOLでCSVをインプットにして...
-
csvファイルのデータの間引きを...
-
VBAでcsvファイルを読み込んで...
-
EXCEL|csvで保存→開くcsvを閉じる
-
複数のCSVファイルのAccessテー...
おすすめ情報