• ベストアンサー

配列に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

  • mixiho
  • お礼率41% (251/608)

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

こんにちは 配列の確保に的を絞ってアドバイスします。 この件では、動的配列を使用することになります。 Dim url(100) As String → Dim url() as String 配列の動的確保を行います。 Redim Preserve url(k) ← この文を追加 url(k) = Reader.ReadLine こんな感じでどうでしょうか。

mixiho
質問者

お礼

ありがとうございます。問題が解決しました。

その他の回答 (3)

  • tkrn
  • ベストアンサー率53% (33/62)
回答No.3

#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

mixiho
質問者

お礼

ご親切にありがとうございます。 コレクションってボタンとかリストとかそういうものに使うものだと思っていました。勉強になりました。ありがとうございます。

  • tkrn
  • ベストアンサー率53% (33/62)
回答No.2

一旦、コレクションに入れる方法があります。 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)
回答No.1

最初にファイル全部を読み込んで、改行コードでSplitするのはどうでしょうか。ファイルが小さい場合に限るようなきもしますが。

mixiho
質問者

お礼

あーなるほど。そういうやり方もありますね。 勉強になります。ただ未知数の添え字に対する配列の作り方がわからないことをクリアしたいのでこのコードをちょこっと改変する形にしたいのです。よろしくお願いします。

関連するQ&A

  • テキストファイルの各行を配列に格納するには?

    お世話になります。vb6でテキストファイルを読み込み、各行を配列に格納するコードを教えて下さい。

  • 【VB2005】です。txtファイルを配列に読み込もうとしています。

    45*45のtxtデータを配列に読み込もうとしているのですが、エラーが出ます。なぜでしょうか? 宜しくお願いします。 【VB2005を使っています。】 Private Sub OpenButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OpenButton1.Click Dim selectButton As DialogResult Dim filename As String Dim i, j As Integer \'開く ダイアログの表示 selectButton = DBOpenDialog1.ShowDialog() filename = DBOpenDialog1.FileName If selectButton = Windows.Forms.DialogResult.OK Then Dim sr As System.IO.StreamReader = Nothing Dim readFields() As String i = 0 sr = New System.IO.StreamReader(filename, System.Text.Encoding.Default) Do Until sr.EndOfStream readFields = sr.ReadLine().Split(\",\") For j = 0 To 44 Tests1(i, j) = readFields(j) Next j i += 1 Loop sr.Close() End If End Sub

  • ファイルの読み込み、配列に格納

    お世話になります。Java初心者です Javaプログラムを実行する同じディレクトリにあるテキストファイルとデータファイルをコマンドラインで同時に読み込み それぞれ違う配列に格納したいのですが、1つのファイルの読み込みは出来ても2つ同時の読み込みと配列格納でつまづいています。 読み込むテキストファイルには以下のような1行の文が、 Dr. Fujita is great! 読み込むデータファイルには以下のような文字が書かれています。 AC 4C 7C 10C KC 3D 6D 9D QD JB 3C 6C 9C QC 2D 5D 8D JD JA 2C 5C 8C JC AD 4D 7D 10D KD 配列に格納する際、テキストファイルの場合は全て大文字にし、アルファベット以外の記号(スペース含)は全て消して配列に格納します。 上の例でいえばこのような状態で格納です↓ DRFUJITAISGREAT データファイルの場合は、2組1文字をそのまま配列に格納です。ただしスペースは飛ばします。 上の例でいえば、ACを配列0に、4Cを配列1に、7Cを配列2に、、、と格納していきます。 import java.io.*; public class sample{ public static void main(String[] args){ try{ FileReader f = new FileReader(args[0]); BufferedReader b = new BufferedReader(f); Strings; while((s=b.readLine())!=null){ System.out.println(s); ←読み込んでるか確認 } }catch(Exception e){ System.out.println(no file); } } } ファイルの指定は実行時に、java sample datafile.dat textfile.txt と指定します。 読み込むプログラムは以上のように書いたのですが、2つファイルを読み込むにはどのように記述したらよいのでしょうか。 FileReaderを2つ作成?しても最初に指定したデータファイルの内容がまた読み込まれるだけで・・・ 読み込んだら変数sに入りますが、たとえばs.substring()なんかでわけて配列に入れようとしても、s.substring()←ここでエラーが出てしまいます。 あと、Dr. Fujita is great!のアルファベットを大文字にし、記号(スペース含)を飛ばして格納するにはどうしたらよいのでしょうか。 宜しくお願いします

    • ベストアンサー
    • Java
  • ファイルの内容を配列に格納したい

    困っているので、皆様の力を貸してください。 以下のようなファイルを読み込み、kのインデックスでソートしてから 配列に格納したいのですがどのようにしたらできますでしょうか? -------------------ファイル内容------------------------------ (= k0 9999) (= k1 1111) (= k2 2222) (= k4 4444) (= k3 3333) ------------------------------------------------------------- 上のファイルの場合は int[0] = 9999; int[1] = 1111; int[2] = 2222; int[3] = 3333; int[4] = 4444; といったように配列に格納したいです。 よろしくお願いします。

    • ベストアンサー
    • Java
  • 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()

  • VB 配列

    今,VBでテキストファイルを読込み配列に入れるという作業を書いたのですが,うまくいきません. 初回例外が発生してしまいます.配列は文字列の配列になります. どなたかご教示のほどよろしくお願いいたします. 'ファイルの読込み Dim path1 As String = "C:\Users\aleph_H.S\Desktop\気象台データインポートツール\気象台データインポートツール\" Dim path2 As String = "気象台データリスト.txt" Dim Mypath As String = path1 + path2 ' StreamReader の新しいインスタンスを生成する Dim cReader As New System.IO.StreamReader(Mypath, System.Text.Encoding.Default) ' 読み込んだ結果をすべて格納するための変数を宣言する Dim stResult As String = String.Empty Dim matrix(,) As String Dim ic As Long = 0 Dim icc As Long = 0 ReDim Preserve matrix(80, 3) ' 読み込みできる文字がなくなるまで繰り返す While (cReader.Peek() >= 0) ' ファイルを 1 行ずつ読み込む Dim stBuffer As String = cReader.ReadLine() ' 読み込んだものを追加で格納する stResult &= stBuffer & System.Environment.NewLine ic = ic + 1 'カンマ区切りで分割して配列に格納する Dim stArrayData As String() = stResult.Split(","c) For Each sstData In stArrayData icc = icc + 1 '文字列をInteger型に変換 matrix(ic - 1, icc - 1) = sstData Next End While cReader.Close()

  • C#で、ファイルのデータを取得し、配列に格納

    C#を始めたばかりで分からないことも多いため、質問させていただきます。 C#で、テキストファイルにある2進数の数値 例: 00111100 11111100 00010100 のような8桁のデータをC#でテキストファイルから2進数のまま読み取り、 配列に格納したいです。 上の例で考えると、 byte[0]に 00111100 byte[1]に 11111100 byte[2]に 00010100  のデータが入力されているような感じです。 ArrayListを使用する方法や、 バイナリファイルで読み込む方法などもあると思うのですが、 データを1行ごとに配列に入力し、 それを見た目どおり2進数として格納する方法が分かりません。 やはり、文字コードなどを参考に、 1文字ずつ格納し、引き算していくしか方法はないのでしょうか? 文章が分かりにくくて申し訳ないのですが、回答いただけるとありがたいです! よろしくお願いいたします。

  • ファイルから一行を読み込み配列に格納したい

    すみません、初心者です。Javaでテキストファイルから一行の文字列を読み込み、Stringの配列に格納したいと思っています。具体的には、マシンの/tmp/test.txtを読み込み、空白行は無視して格納したいです。ウェブを参考にして、以下のようには出来たのですが、最初にStringの配列を20個宣言しており、これをどうにかテキストファイルの行(マイナス空白行)の数だけ宣言させたいです。(理由はファイルによっては想定以上の個数の場合も有り得ますし、余分なメモリを使用することになるのと、後からこの配列を使用しやすい、といった諸々で。。)以下のコードをどのように変えると実現出来るかご教示頂けませんでしょうか。 (一行あたりの文字列はつながっており、空白が間に入る事はありません) import java.io.*; public class test { public static void main(String[] args) throws Exception { int i=0; String[] str = new String[20]; FileReader fr = new FileReader("/tmp/test.txt"); StreamTokenizer st=new StreamTokenizer(fr); while(st.nextToken()!=StreamTokenizer.TT_EOF) { System.out.println(st.sval+" "); str[i]=st.sval; i++; } fr.close(); } } (test.txtが以下の場合) ----------------------- fdjosa djsoafdjfdajof jsoafds fdsaoofdafd fdjso fjds ----------------------- (配列は以下になることを想定) str[0]=fdjosa str[1]=djsoafdjfdajof str[2]jsoafds str[3]=fdsaoofdafd str[4]=fdjso str[5]=fjds (*配列数であるstr.lengthは6)

    • ベストアンサー
    • Java
  • 【C#】二次元配列へのcsvファイルの格納について

    いつもお世話になってます。 C#に関して質問です。 VisualC#2008を使用しています。 二次元配列の中にcsvファイルの内容を格納したいと思っています。 一次元配列だと、split(',')のようにコンマで区切って格納することができたのですが、 二次元配列になるとうまくいきません。 作成中のプログラム(一部)は下記のようになっています。 二次元配列になっても、csvファイルをうまく格納できる方法を誰かおしえていただけないでしょうか? よろしくお願いします。 private void 問題ファイルを読み込むXToolStripMenuItem_Click(object sender, EventArgs e) { OpenFileDialog ofd = new OpenFileDialog(); if (ofd.ShowDialog() == DialogResult.OK) { System.IO.Stream stream; stream = ofd.OpenFile(); //StreamReaderオブジェクトの作成 StreamReader sr = new StreamReader(stream, Encoding.GetEncoding(932)); string dat; //文字を入れる while ((dat = sr.ReadLine()) != null) { sbuf = dat.Split(','); //エラー箇所 //DataGridViewに新しい行を追加 int r = dataGridView1.Rows.Add(); dataGridView1[0, r].Value = sbuf[mondai_count,0]; dataGridView1[1, r].Value = sbuf[mondai_count,1]; dataGridView1[2, r].Value = int.Parse(sbuf[mondai_count,2]); //Parseで文字列を数値に変換 } //visible=False でDataGridView非表示 mondai_bun[0] = sbuf[mondai_count,0]; mondai_title[0] = sbuf[mondai_count,1]; mondai_bun2.Text = mondai_bun[0]; this.mondai_list.Items.Add(mondai_title[0]); //ファイルを閉じる sr.Close(); stream.Close(); } }

  • VBSでTXTファイルを配列に格納し表示

    ファイル名:test.txt  内 容 :日付 数字 数字 数字 数字 数字        日付 数字 数字 数字 数字 数字              ・              ・ (1)日付も090106のような数字で全て数値です。 (2)1年分250行です。 (3)全ての日付や数字の間はスペースで最後の数字で改行です。 VBSでこのテキストファイルを読み込み2次元配列に入れて、 例えば6月10日(日付が090610)の行とその次の日の行の2行を 表示するには、どのようなコードになりますか? すいません、プログラマー学習でないためできればコードを 教えていただきたいです。宜しくお願いします。

専門家に質問してみよう