从c#中的.txt文件中读取x,y值

时间:2013-05-13 13:10:22

标签: c# indexing

我正在尝试将文本文件中的x和y值读取到字符串数组中,其中行被分割为',' 但是,当我运行此代码时,我得到一个错误,指出索引超出了第一个元素上数组的范围。我已经尝试使用临时字符串来存储数据然后转换它们但我仍然在第二个元素上得到相同的错误。这是我在没有临时字符串的情况下实现的代码。

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行数据如下:

  
    

654603

         

640583

         

587672

         

627677

         

613711

         

612717

         

584715

         

573662

         

568662

         

564687

  

文本文件中没有空行。

正如Jon Skeet指出的那样,删除临时分配似乎已经修复了这个错误。然而,即使有作业,它仍然应该有效。 while循环中的以下代码示例有效:

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

已知树木的数量,但我要感谢大家的投入。在不久的将来会有更多问题:D

2 个答案:

答案 0 :(得分:2)

尝试使用List<Point>作为trees集合而非数组。如果您事先不知道正确的计数,这将有所帮助。

var trees = new List<Point>();
while (...)
{
    ...
    trees.Add(new Point(x, y));
}

第二个可能的问题是输入行不包含有效数据(例如,为空)。通常,带数据的最后一行以换行符结束,因此最后一行为空。

while ((line = coordStream.ReadLine()) != null)
{
    var temp = line.Split(',');
    if (temp.Length != 2)
        continue;
    ....
}

答案 1 :(得分: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]) });