- ベストアンサー
配列にtxtファイルの各行を格納する際の問題点の解決法を教えてください。
お世話になります。vb2005を使用しています。 以下のコードでテキストファイルを各行ごとに配列に格納したのですが 以下のコードだと100行など、あらかじめ指定した数の行でないと 配列に格納できないので読み込んだテキストファイルの行数分だけ 配列に格納するにはどう改善すればよろしいでしょうか? 教えてください。お願いします。 Dim Reader As New IO.StreamReader("C:\list.txt") Dim url(100) As String Dim k As Integer = 0 Do While Not Reader.Peek() = -1 url(k) = Reader.ReadLine k += 1 Loop Reader.Close() Reader = Nothing
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは 配列の確保に的を絞ってアドバイスします。 この件では、動的配列を使用することになります。 Dim url(100) As String → Dim url() as String 配列の動的確保を行います。 Redim Preserve url(k) ← この文を追加 url(k) = Reader.ReadLine こんな感じでどうでしょうか。
その他の回答 (3)
- tkrn
- ベストアンサー率53% (33/62)
#2です。 追記ですが、配列でのみ行いたい場合も書いておきます。 ReDim Preserveを使えば動的に配列領域を確保可能です。 Dim Reader As New IO.StreamReader("C:\list.txt") Dim url() As String Dim k As Integer = 0 Do While Not Reader.Peek() = -1 ReDim Preserve url(k) url(k) = Reader.ReadLine k += 1 Loop Reader.Close() Reader = Nothing
お礼
ご親切にありがとうございます。 コレクションってボタンとかリストとかそういうものに使うものだと思っていました。勉強になりました。ありがとうございます。
- tkrn
- ベストアンサー率53% (33/62)
一旦、コレクションに入れる方法があります。 Dim Reader As New IO.StreamReader("C:\list.txt") Dim aryUrl As List(Of String) Dim url() As String 'Dim k As Integer = 0 aryUrl = New List(Of String) Do While Not Reader.Peek() = -1 aryUrl.Add(Reader.ReadLine) 'k += 1 Loop url = aryUrl.ToArray() Reader.Close() Reader = Nothing .NETではコレクションが強化されていますので、配列を利用するより、コレクションを利用された方がよいかもしれません。
- KG_
- ベストアンサー率62% (34/54)
最初にファイル全部を読み込んで、改行コードでSplitするのはどうでしょうか。ファイルが小さい場合に限るようなきもしますが。
お礼
あーなるほど。そういうやり方もありますね。 勉強になります。ただ未知数の添え字に対する配列の作り方がわからないことをクリアしたいのでこのコードをちょこっと改変する形にしたいのです。よろしくお願いします。
お礼
ありがとうございます。問題が解決しました。