プロが教える店舗&オフィスのセキュリティ対策術

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

A 回答 (5件)

aaa,bbb,ccc


という行があったとしたら、
inputでは
aaa
bbb
ccc
とう順でよんでいきます。

Line Inputでは
aaa,bbb,ccc
と、カンマを含め1行を読み込みます。

Label4配列はいくつ切っていますか?
Label4(i).caption = MyString(i)
を取るとエラー出ないと思いますよ。
    • good
    • 0

MyStringも大きくして。

    • good
    • 0

Line Input #1,a で改行コードまで読む。

その文字列aに対し
s=Split(a,",")
For i=0 to Ubound(s)
(処理)
Next i
レコードの終わりはEof(1)で判別し抜ける。
    • good
    • 0

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
    • good
    • 0

CSVファイルといっても何種類か存在します。


書式をお知らせください。

区切り文字が半角「,」か他の文字(「","」「#」)か
区切りの数が可変か固定か
改行コードは?。

現在でもPC-9801系CSVファイルが4系統, IF-800系CSVファイルが2系統, Windows系CSVファイルが2系統あり.私の使っているルーチンは以上の混用を前提に作られています。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています