2016-06-18 7 views
-4

テキストファイルからデータフィールド名をプログラムにロードし、変数、配列に格納しようとしています。なぜ私はIndexOutOfRangeExceptionを取得しているのか分かりません

フィールド名は、他のファイルのデータをソートして整理された新しいドキュメントに印刷するために使用されます。

特に、ファイルのフィールドを配列に格納する際に、多くの問題があります。

データフィールドテキストファイルは、各フィールドが独自の行にあるリスト形式で構成されています。

StreamReaderのPeek()が-1になるまで実行されるwhileループを作成しました。

whileループ内でforループをネストし、インデックス整数変数を1だけインクリメントして、テキストファイルの行の総数以下になるまで入れ子にしました。

また、ReadLine()を使用して、テキストドキュメントの行を特定のインデックスの配列に格納します。私はforループでそれを使って各行を繰り返し、格納する必要があるものを格納すると考えました。

辞書の中のフィールドを使用して、そのフィールドをキーとして使用し、他のドキュメントのデータを辞書の値として使用する必要があります。

私が行ったやり方は、IndexOutOfRangeExceptionを避けるために必要な手段があると思いましたが、そうではないと思います。

私はこれを手伝ってくれる人に感謝します。何か不明な点がある場合はお詫びし、必要に応じて事態を明確にしようとします。

私未遂のロジックの説明はひどいものだった場合は、ここでのコードは次のとおりです。

class Program 
{ 
    protected static string[] dataFields = new string[] { }; 

    static void Main(string[] args) 
    { 
     int iIndex; 

     using (StreamReader titleStream = new StreamReader(@"..\..\DataFieldsLayout.txt")) 
     { 
      while (titleStream.Peek() > -1) 
      { 
       for (iIndex = 0; iIndex <= 150; iIndex++) 
       { 
        // where the exception occurs 
        dataFields[iIndex] = titleStream.ReadLine(); 
       } 
      } 
     } 

     // test 
     Console.WriteLine(dataFields[0]); 
     Console.WriteLine(dataFields[1]); 
     Console.WriteLine(dataFields[2]); 
     Console.WriteLine(dataFields[3]); 
     Console.WriteLine(dataFields[4]); 
    } 
} 
+0

[IndexOutOfRangeExceptionとは何ですか?また修正するにはどうすればいいですか?](http://stackoverflow.com/questions/20940979/what-is-indexoutofrangeexception-and-how-do-i-fix-it) –

+0

要素数がゼロの文字列を宣言しています。この配列にはどのような種類のインデックスも使用できません。 – Steve

+0

別のポイントです。あなたのファイルには、常に正確に151行または151の倍数が含まれていますか? – Steve

答えて

0

あなたは配列を定義するときに、各要素のための部屋を作るために持っているためです。配列を宣言すると、新しいデータを受け入れるスペースが与えられません。あなたは(それはすべてのデータのための十分なスペースを持つように)、以下の方法であなたの配列を宣言することがあります:

protected static string[] dataFields = new string[151]; 

あなたは151個の要素(あなた<= 150状態理由)まで読んでいるので、あなたがしたいです適切な量​​のスペースを与えます。

+0

また、文字列[]の代わりにリストを使用することを検討してください。あなたのコレクションが含まれていますどのように多くのアイテム絶対の自信を知っている回数は非常に、非常に小さく、あなたは実際にリストのパフォーマンス・オーバーヘッドを心配している場合、あなたはおそらくC/C++ /錆/何かを使用する必要がありますとにかく収集されたゴミではありません。 –

+0

@NickBaileyええ、あなたが欲しいアイテムの数が分からない場合は特にそうです。後でリストを '.ToArray()'するだけで済みます。 – Snoopy

+0

ええ、私は今まで読んでいない配列を使ったことがあるかどうか分かりません。 –

関連する問題