- ベストアンサー
CSVの読み込みについて
いつもお世話になります。 TextBox1に品物のコードを入れて、Label1に価格を表示するという簡単そうなものです。 品物のコードはCSVファイルのItem(1)から取得します。ところが存在しないコードを入力すると、 追加情報 : インデックスが配列の境界外です というエラーが出ます。下記ソースに何を追加すればよろしいのでしょうか?ご教授下さい。よろしくお願い致します。 Dim Reader As New IO.StreamReader("C:\XXX.csv", System.Text.Encoding.GetEncoding("Shift-JIS")) Dim Items() As String Dim Line As String = Reader.ReadLine Dim Code As String 'コード Dim kakaku As String '価格 Do Until IsNothing(Line) Items = Line.Split(",") Code = Items(1) If HinCode = TextBox1.Text Then kakaku = Items(2) Label1.Text = kakaku Exit Sub End If Line = Reader.ReadLine Loop Reader.Close()
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
色々読み方はありますが、参考にして下さい(^^; Private Sub Label1_Click() Dim Line As String Dim Items() As String Open "D:XXX.csv" For Input As #9 Label1.Caption = "" Do Until EOF(9) Line Input #9, Line Items = Split(Line, ",") Debug.Print Items(0), Items(1) If Text1.Text = Items(0) Then Label1.Caption = Items(1) Exit Do End If Loop Close #9 End Sub
その他の回答 (4)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
品名,価格 Items(0),Items(1) だと思います。 Items(2)にするので、配列範囲外になっているのでは
お礼
皆様の回答を参考にさせて頂き、何とか解決しました。ありがとうございました。
- arare2005
- ベストアンサー率31% (63/199)
>Do Until IsNothing(Line) -->EOF がこれで検知できる様にCSVを設定していますか? 最後の行に改行コードが入っていればエラーになると思います。 ランダムに読み込まないのであれば、普通にLINE INPUT の方が判り易いかな~ でEOF を聞けば間違いはありません。 >If HinCode = TextBox1.Text Then > kakaku = Items(2) > Label1.Text = kakaku > Exit Sub >End If EXIT SUB --> EXIT DO LOOP を超えて処理するのは、基本的にいけません。 CLOSE 処理が抜けています。 配列も(0)~ではなく(1)~で設定しているのでしょうか? ここだけ見ると、ちょっと判り辛いかも知れませんネ(^^;
- arare2005
- ベストアンサー率31% (63/199)
No.1です。ごめんなさい。回答を間違えました。m(_ _)m よく見てませんでした。
補足
こんなCSVファイルの内容です りんご,500 いちご,700 もも,1000 「りんご」をTextBoX1に入力すると、Label1に「500」と表示されるものです。 TextBox1に「みかん」と入力するとエラーがでます。 エラーを出さずに他のフォームに移動させるようにしたいです。
- arare2005
- ベストアンサー率31% (63/199)
>TextBox1に品物のコードを入れて、Label1に価格を表示するという ここだけのコーディングには、それらしい記述がないのですが。。。 又、基本的にエラーの場合の処理は記載がありません。 ※気づいた所だけ >Dim Items() As String これでは配列がいくつあるか明示されていません。 ReDim ... Elase などできちんと再定義やクリアしましょう。 Dim Items(1 TO 2) ... でも良いですが、回答になってるのでしょうかネ(^^;
お礼
参考になりました。 ありがとうございました。