0

我正在尝试为我的 second( ) 数组var1-4的四个部分分配变量() 。lines2

static void Main(string[] args)
{
    string var1;
    string var2;
    string var3;
    string var4;

    string readContents;
    using (StreamReader streamReader = new StreamReader(@"File.txt"))
    {
        readContents = streamReader.ReadToEnd();
        string[] lines = readContents.Split('\r');
        foreach (string s in lines)
        {
            string[] lines2 = s.Split('\t');
            foreach (string s2 in lines2)
            {
                var1 = lines2[0];
                var2 = lines2[1];
                var3 = lines2[2];
                var4 = lines2[3];
                Console.WriteLine(var4);
            }
        }
    }
}

目前,我遇到了var1返回我想要的数据的问题,但是控制台显示的值是我文件中实际存在的值的 8 倍。在运行时,我总是在第一个之后得到IndexOutOfRangeException一个var。不确定是什么导致了这些错误中的任何一个。

编辑:来自文本文件的数据 - 每个都由一个选项卡分隔:

2015-04-19 00:00:00  HostName.ErrorLevel    IP Address  "Error Message"
2015-04-19 00:00:00  HostName.ErrorLevel    IP Address  "Error Message"
2015-04-19 00:00:01  HostName.ErrorLevel    IP Address  "Error Message"
4

1 回答 1

1

您可以遍历结果Split并对每个 OR 按索引访问结果执行某些操作。您的代码同时执行这两种操作,虽然有机会正确,但它会重复分配多次。

此外,您没有检查字符串中的部分数量并导致“索引超出范围”。

已经有将所有行读入可枚举的方法 - File.ReadAllLines,所以唯一剩下的就是正确拆分每个字符串:

    foreach (string s in lines)
    {
        string[] lines2 = s.Split('\t');
        if (lines2.Length == 4)
        {
          var1 = lines2[0];
          var2 = lines2[1];
          var3 = lines2[2];
          var4 = lines2[3];
          Console.WriteLine(var4);
        }
        else
        { 
             // report error?
        }
      }
    }
于 2015-05-14T17:30:02.063 回答