0

x と y の値をテキスト ファイルから文字列配列に読み込もうとしています。行は ',' で分割されています。しかし、このコードを実行すると、インデックスが範囲外であるというエラーが表示されます最初の要素の配列。一時文字列を使用してデータを保存してから変換しようとしましたが、2 番目の要素でも同じエラーが発生します。これが一時的な文字列なしで実装した私のコードです。

string line;
while ((line = coordStream.ReadLine()) != null)
{
   string[] temp = new string[2];
   temp[0] = "";
   temp[1] = "";
   temp = line.Split(',');
   trees[count].X = Convert.ToInt16(temp[0]);
   trees[count].Y = Convert.ToInt16(temp[1]);
   count++;
 }

一時ストレージも含むコードは次のとおりです。

string line;
while ((line = coordStream.ReadLine()) != null)
{
   string[] temp = new string[2];
   temp[0] = "";
   temp[1] = "";
   temp = line.Split(',');
   string xCoord = temp[0];
   string yCoord = temp[1];
   trees[count].X = Convert.ToInt16(xCoord);
   trees[count].Y = Convert.ToInt16(yCoord);
   count++;
 }

これは些細なエラーのように思えますが、これを機能させることができないようです。配列を手動でデバッグしてステップスルーすると機能しますが、ステップスルーしないと(つまり、プログラムを実行すると)、これらのエラーがスローされます

編集: データの最初の 10 行は次のとおりです。

654,603

640,583

587,672

627,677

613,711

612,717

584,715

573,662

568,662

564,687

テキスト ファイルに空行はありません。

Jon Skeet が指摘したように、一時的な割り当てを削除すると、このエラーが修正されたようです。ただし、割り当てがあっても、まだ機能しているはずです。while ループ内の次のコード サンプルは機能します。

string[] temp;
temp = line.Split(',');
trees[count].X = Convert.ToInt16(temp[0]);
trees[count].Y = Convert.ToInt16(temp[1]);
count++;

木の数はわかっていますが、皆さんの意見に感謝したいと思います。近い将来、さらに多くの質問を期待してください:D

4

2 に答える 2

1
var lineContents = File.ReadAllLines("").Select(line => line.Split(',')).Where(x => x.Count() == 2);
var allTrees = lineContents.Select(x => new Trees() { X = Convert.ToInt16(x[0]), Y = Convert.ToInt16(x[1]) });
于 2013-05-13T13:14:30.263 に答える