意味着你的当前代码尝试的作品,我没有通过验证了......
你可以只需执行以下操作:
List<int> elements = new List<int>();
while (null != (line = streamReader.ReadLine()))
{
if(line.Contains("["))
{
//Prevent reading in the next section
break;
}
string[] split = line.Split(Convert.ToChar(" "));
//Each element in split will be each number on each line.
for(int i=0;i<split.Length;i++)
{
elements.Add(Convert.ToInt32(split[i]));
}
}
或者,如果您需要2维列表,以便您可以重新按行显示数字,可以使用嵌套列表。对于外部循环的每次运行,创建一个新列表并将其添加到元素(元素将是List<List<int>>
)。
编辑
只是注意,小心使用Convert.ToInt32()函数。它应该真的在try catch语句中,以防一些读入的文本不是数字。
编辑
行..使例程更稳健(每低于我的意见):
首先确保例程不超越你的号码块。我不知道什么是超越你所列出的块,这样就会给你,但它应该采取以下形式:
If(line.Contains("[") || line.Contains("]") || etc etc etc)
{
break;
}
接下来的事情是预格式化您的拆分值。在for语句中:
for(int i=0;i<split.Length;i++)
{
string val = split[i].Trim(); //Get rid of white space
val = val.Replace("\r\n",""); //Use one of these to trim every character.
val = val.Replace("\n","");
try
{
elements.Add(Convert.ToInt32());
}
catch (Exception ex)
{
string err = ex.Message;
//You might try formatting the split value even more here and retry convert
}
}
要访问单个数字(假设您使用单维列表),有几种方法可以执行此操作。如果你想通过索引值来访问:
elements.ElementAt(index)
如果您想通过值列表进行迭代
:
foreach(int val in elements)
{
}
如果您需要确切地知道哪行的价值是从哪里来的,我建议2d列表。这将实现如下(我复制从原来的代码片段我的代码,所以假定所有的错误检查的加入!)
List<List<int>> elements = new List<List<int>>();
while (null != (line = streamReader.ReadLine()))
{
if(line.Contains("["))
{
//Prevent reading in the next section
break;
}
List<int> newLine = new List<int>();
string[] split = line.Split(Convert.ToChar(" "));
//Each element in split will be each number on each line.
for(int i=0;i<split.Length;i++)
{
newLine.Add(Convert.ToInt32(split[i]));
}
elements.Add(newLine);
}
我们访问由线的每个元素:
foreach(var line in elements)
{
//line is a List<int>
int value = line.ElementAt(index); //grab element at index for the given line.
}
另外,如果你需要直接行索引和列索引引用
int value = elements.ElementAt(lineIndex).ElementAt(columnIndex);
注意所有这些直接的指标参考。你可以很容易地得到索引超出界限的问题。
另外一件事情..你应该在你的Convert.ToInt语句上放一个断点,并找出它打破的字符串。如果您可以假设数据输入是一致的,那么准确地找到打破转换的字符串将帮助您创建一个处理正在过滤的特定字符的例程。我会猜测,当它尝试将最后一个拆分值转换为整数,并且我们没有删除行尾。
可以读取HRDATA后线,分成每行的数据。当你看到什么让你停下来时停下来。 – sln
是啊多数民众赞成在即时尝试实现,但多数民众赞成为什么我问这个问题,我不知道如何告诉我的代码阅读AFTER [HRData] –
因为我目前的if语句if(line.Contains(“[HRData]”) ))只读取包含它的行,而我希望它在读取之后读取。 –