0

我正在尝试将文本文件中的 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行数据如下:

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

2

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

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;
    ....
}
于 2013-05-13T13:15:06.620 回答
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 回答