在c#中读取文本文件的有效方法,用于行到行操作

时间:2016-01-11 15:37:43

标签: c# file-read

我在读取文本文件时遇到了行到行添加操作的问题。我使用了以下语法

StreamReader reader = new StreamReader("input.txt"); string line; while ((line = reader.ReadLine()) != null) string[] splitted = line.Split('#'); string first = splitted[0].Trim(); string second = splitted[1].Trim();

如果文件具有以下值,我已使用此语法将输入与文本文件分开。

12#15

15#7

13#14

23#31

 x= Convert.ToInt32(first);
 y= Convert.ToInt32(second);
 sum = x+y;
 txtBox.text = Convert.ToString(sum);

问题是它只执行最后一行。它只计算23和31的总和并仅显示,但我想首先添加12和15并在文本框中显示它同样我想添加其他。请帮我形成合适的语法。

3 个答案:

答案 0 :(得分:1)

问题是模糊的,但是,我建议使用 Linq

  var source = File
    .ReadLines("input.txt")           // read line by line
    .Select(line => line.Split('#'))  // split each line
    //.Where(items => items.Length == 2)  // you may want to filter out the lines
    .Select(items => new {            // convert each line into anonymous class 
       first = items[0].Trim(),
       second = items[1].Trim()
     });

您可以根据需要添加尽可能多的Select(行到行操作)。然后,您可以在foreach循环中继续项目:

  foreach (var item in source) { 
    ...
    // Let's read some fields from the anonymous object
    var first = item.first;
    var second = item.second; 
    ...
  }

编辑根据已编辑的问题,您只想总结哪些内容也可以通过 Linq 完成:

  var result = File
    .ReadLines("input.txt")   
    .Select(line => line.Split('#'))
    //.Where(items => items.Length == 2)  // you may want to filter out the lines
    .Sum(items => int.Parse(items[0]) + int.Parse(items[1]));

  txtBox.text = result.ToString();

答案 1 :(得分:0)

它不会只读取最后一行,你永远不会对其他迭代做任何事情。目前,您只需将line重新分配给已读取的最新行的值,我认为您希望将这些保存到列表或类似内容

StreamReader reader = new StreamReader("input.txt");
string line;
List<string> allLines = new List<string>();
while ((line = reader.ReadLine()) != null)
     allLines.Add(line);

答案 2 :(得分:0)

在这里你可以测试你的文件并将数据加载到DataTable中,这应该非常简单。

DataTable dtTextFileData = new DataTable();
dtTextFileData.Columns.AddRange(new []
{
    new DataColumn("First", typeof(string)), 
    new DataColumn("Second", typeof(string)) 
});

StreamReader file = new StreamReader(@"c:\YourFilePath\input.txt");
string line = file.ReadLine();
while (line != null)
{
    string[] fields = line.Split('#');
    DataRow dr = dtTextFileData.NewRow();
    dr["First"]  = fields[0].ToString();
    dr["Second"] = fields[1].ToString();
    dtTextFileData.Rows.Add(dr);
    line = file.ReadLine();
}