从文本文件中读取数据并将其存储到集合中

时间:2018-06-08 01:13:29

标签: c# readline

我正在尝试读取由标签'\ t'分隔的文本,并将其存储到对象列表中。 文字如下:

1   Name    Number      City

我尝试过这种方法,但它只适用于一行:

string line = sr.ReadLine();
string[] word = line.Split('\t');

for (int i = 0; i <= word.Length; i++)

ec.code = Convert.ToInt32(word[0]);
ec.Name = word[1];
ec.Number = Convert.ToInt32(word[2]);
ec.City = word[3];
list.Add(ec);

如何阅读列表中的所有行?

2 个答案:

答案 0 :(得分:1)

假设文件中的每一行都遵循1 Name Number City格式,您可以尝试:

var lines = File.ReadAllLines(filename);
foreach (var line in lines)
{
     string[] word = line.Split('\t');
     for (int i = 0; i <= word.Length; i++)
     {    
          ec.code = Convert.ToInt32(word[0]);
          ec.Name = word[1];
          ec.Number = Convert.ToInt32(word[2]);
          ec.City = word[3];
          list.Add(ec);
     }
}

答案 1 :(得分:0)

问题很简单,当你执行sr.ReadLine()时,你只处理一行。相反,您可以考虑使用File.ReadAllLines,它将所有行读入数组。您可以将其与Split方法结合使用,从每行中提取所需的项目。

你的for循环也没有意义 - 看起来你正在循环遍历行中的每个单词,但是在循环体中你每次都要添加所有单词。我认为可以删除for循环。

此外,还不清楚ec是什么,但您应该在每次迭代时实例化一个新的// Class to represent whatever it is you're adding in your loop class EC { public int Code { get; set; } public string Name { get; set; } public int Number { get; set; } public string City { get; set; } } 。否则,您只是一遍又一遍地向列表中添加相同的引用,它们都将具有相同的值(从最后一行读取)。

以下是我正在使用的示例类:

Split

我们应该做的一件事是,在将索引引入从调用IndexOutOfRange返回的数组之前,我们应该确保首先有足够的项目。否则,如果我们尝试引用不存在的索引,我们将得到int.TryParse异常。

另外,确保我们期望整数的字符串实际整数是个好主意。我们可以使用// Path to our file var filePath = @"f:\public\temp\temp.txt"; // The list of things we want to create from the file var list = new List<EC>(); // Read the file and create a new EC for each line foreach (var line in File.ReadAllLines(filePath)) { string[] words = line.Split('\t'); // First make sure we have enough words to create an EC if (words.Length > 3) { // These will hold the integers parsed from our words (if parsing succeeds) int code, number; // Use TryParse for any values we expect to be integers if (int.TryParse(words[0], out code) && int.TryParse(words[3], out number)) { list.Add(new EC { Code = code, Name = words[1], Number = number, City = words[3] }); } } } 来做到这一点,它会在成功时返回true,并将out参数设置为已解析的值。

以下是使用所有这些想法的示例:

x <- c(rnorm(100))
y <- c(rnorm(100))
plot(x, col="blue")
lines(y, col = "red")