我有一段程序,用来获取一个以制表符分隔的多行文本文件内容//str=文本文件的字符串内容
//LineStr是每一行内容
//r是每一行中制表符分隔的内容string[] LineStr = str.Split(new string[] { "\n" }, StringSplitOptions.RemoveEmptyEntries);foreach (string eachLineStr in LineStr)
{
    //行内容太小丢弃
    if (eachLineStr.Length < 2)
    {
        continue;
    }
    //以字符“品种”开头的行是一个抬头行
    if (eachLineStr.Substring(0, 2) == "品种")
    {
        Console.WriteLine(eachLineStr); //输出抬头
    }
    //获取每行内容
    string[] r = eachLineStr.Split(new string[] { "\t" },StringSplitOptions.None);
    
    //行元素个数符合要求时,输出行
    if (r.Length == 10)
    {
        Console.WriteLine(eachLineStr);//输出有效内容 
    }
}现在的问题是我每次运行这段代码的时候在VS2005中输出的抬头和有效内容的顺序与文本文件中的顺序不一致!(文本文件中抬头在有效内容之前,但是输出窗口中的输出有效内容在抬头之前。)
另外一点这段代码是用在BackGroundWorker的Do_Work调用的方法中,是否因为这个原因造成VS2005输出顺序的不一致?

解决方案 »

  1.   

    从实现功能上当然可以,但我就是不明白,为什么输出顺序不一致!我查到的关于用foreach访问数组的资料都默认从索引0开始。
      

  2.   


    跟这个没有关系的!
    这么改改看?  //以字符“品种”开头的行是一个抬头行
      if (eachLineStr.Substring(0, 2) == "品种")
      {
      Console.WriteLine(eachLineStr); //输出抬头
      //获取每行内容
      string[] r = eachLineStr.Split(new string[] { "\t" },StringSplitOptions.None);
       
      //行元素个数符合要求时,输出行
      if (r.Length == 10)
      {
      Console.WriteLine(eachLineStr);//输出有效内容 
      }
      }
      

  3.   

    把eachLineStr.Length<2 改成>2 然后继续执行
     if (eachLineStr.Substring(0, 2) == "品种")
      {
      Console.WriteLine(eachLineStr); //输出抬头
      }
    试试?
      

  4.   

    先用ArrayList排序一下,再foreach。
      

  5.   

    调试一下,看看string[] LineStr的内容,有可能顺序在这就已经乱了,你的文件内容是怎么读进来的