我正在尝试为我的第二个(lines2
)数组的四个部分分配变量(var1-4
)。
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 倍。而且在运行时,我总是在第一个var
之后的每个上都得到一个IndexOutOfRangeException
。不确定是什么导致了这些错误。
编辑:来自文本文件的数据 - 每个用制表符分隔:
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"
您可以遍历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?
}
}
}