
VB6.0について質問です。
CSVファイルの読み込みを行いたいのですがうまくいきません。。。
以下のソースのどこに問題ありますでしょうか?><
14個のカンマ区切りのCSVファイルを読み込んでいますが
ファイルのデータを変更するとインデックスが有効範囲にありませんというエーラーがでます。。。
ファイルは3行で構成しているのですがヘルプを参照したら複数行の場合はLINE Input #1, MyString(i)と書いてありました。
しかしやってみると行ごとのデータを取得してカンマ区切りで取得してくれませんでした。。。
以下のソースで実行すると改行部でエラーになるようです。
改行を無視するようなロジックを入れる必要があるのでしょうか?
Dim MyString(), i
Open App.path & "\" & CSV_filename For Input As #1
ReDim MyString(13)
Do While Not eof(1)
Input #1, MyString(i)
Label4(i).caption = MyString(i)
i = i + 1
Loop
Close #1
No.4ベストアンサー
- 回答日時:
CSVファイルを列数は固定で、カンマで区切られていて複数行あるものとします。
(一般的な概念)●必ず列が5個(カンマが4個)の一行が複数行ある場合
Dim MyString() as String
Dim i , j as Integer
Open App.path & "\" & CSV_filename For Input As #1
Do until EOF(1)
i = i + 1 ''行数を先に数えます
Loop
Redim MyString(i , 5) as String ''行数×列数分変数を初期化します
for j = 1 to i
Input #1, MyString(j,1),MyString(j,2),MyString(j,3),MyString(j,4),MyString(j,5)
Next j
Close #1
Debug.Print "2行目の3列目=" & MyString(2,3)
●必ず列が5個(カンマが4個)の3行一組が複数セットある場合
for j = 1 to i / 3
Input #1, MyString(j,1),MyString(j,2),MyString(j,3),MyString(j,4),MyString(j,5)
Input #1, MyString(j,6),MyString(j,7),MyString(j,8),MyString(j,9),MyString(j,10)
Input #1, MyString(j,11),MyString(j,12),MyString(j,13),MyString(j,14),MyString(j,15)
Next j
★ご質問の中の問題点
1.「データを変更すると」
→列数は変更してはいけません(カンマの数は必ず同数)
2.「LintInput」
→Inputは行毎・列毎に値を取得します。LineInputは一行をひとつの値として値を取得します。
3.「ReDim MyString(13)」
→上記設定ですと変数は14個分ですが、カンマが14個ということは15個の変数が必要です
「Redim MyString(14)または(1 to 15)」となります
4.「Input #1, MyString(i)」
→列が15個あるのに一回のループで1個ずつしか値が取れません
セル番号で表すと、
MyString(1) = "A1"
MyString(2) = "B1"
MyString(3) = "C1" となってしまいます。
つまり、行数に関わらず、14個までしか値の取得はできません。
長文にも関わらず的確でなくてすいません。
CSVファイルのイメージをご提示いただけるとサンプルソースが作りやすいと思います。
例)CSVファイルで列数は固定、行数は可変で各行の3番目の値を表示したい etc.
A1,B1,C1,D1,E1
A2,B2,C2,D2,E2
A3,B3,C3,D3,E3
例)CSVファイルで列数は可変、行数は可変でn番目の値を表示したい etc.
A1,B1,C1
A2,B2,C2,D2,E2
A3,B3,C3,D3

No.5
- 回答日時:
CSVファイルといっても何種類か存在します。
書式をお知らせください。
区切り文字が半角「,」か他の文字(「","」「#」)か
区切りの数が可変か固定か
改行コードは?。
現在でもPC-9801系CSVファイルが4系統, IF-800系CSVファイルが2系統, Windows系CSVファイルが2系統あり.私の使っているルーチンは以上の混用を前提に作られています。
No.3
- 回答日時:
Line Input #1,a で改行コードまで読む。
その文字列aに対しs=Split(a,",")
For i=0 to Ubound(s)
(処理)
Next i
レコードの終わりはEof(1)で判別し抜ける。
No.1
- 回答日時:
aaa,bbb,ccc
という行があったとしたら、
inputでは
aaa
bbb
ccc
とう順でよんでいきます。
Line Inputでは
aaa,bbb,ccc
と、カンマを含め1行を読み込みます。
Label4配列はいくつ切っていますか?
Label4(i).caption = MyString(i)
を取るとエラー出ないと思いますよ。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
カンマ区切りのCSVファイルから...
-
エクセルVBA 大容量CSVファイル...
-
【エクセルVBA】お願いします。...
-
複数のCSVファイルのAccessテー...
-
データ解析ソフトRでのファイル...
-
特定ファイルの一括削除
-
csvファイルでの日付設定「yyyy...
-
「,」区切りのcsvファイルを...
-
fgetsでcsvファイルを読み込め...
-
VBAでcsvファイルを読み込んで...
-
バッチでCSVを処理する時、空の...
-
csvファイル 項目数取得
-
複数のcsvファイルをフォルダご...
-
csvファイルのデータの一部を取...
-
ExcelマクロにてCSV出力したデ...
-
エクセルvbaでdocuworksprinter...
-
エクセルのプロパティーでセキ...
-
ファイル名と同名のフォルダを...
-
エクセルVBAで一つ上の階層...
-
同じファイル名 上書きしないフ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
カンマ区切りのCSVファイルから...
-
バッチでCSVを処理する時、空の...
-
csvファイルでの日付設定「yyyy...
-
【C#】パス名で無効な文字
-
CSV形式での保存時に”文字列...
-
csvファイル 項目数取得
-
マクロから出力されるcsvのダブ...
-
csvファイルを列数ごとに分割す...
-
VBAでcsvファイルを読み込んで...
-
データ解析ソフトRでのファイル...
-
【エクセルVBA】お願いします。...
-
エクセルVBA 大容量CSVファイル...
-
csvファイルのデータの一部を取...
-
CSVファイル作成
-
CSV出力して、MS/EXCELで開くと...
-
CSVファイルの項目行を削除...
-
エクセル形式のファイルの読み込み
-
複数のcsvファイルをExcelに一...
-
【エクセル マクロ】読み込ん...
-
複数のCSVファイルのAccessテー...
おすすめ情報