从csv文件中读取特定行并让行变化

时间:2015-05-19 14:52:31

标签: c# csv

我需要从CSV文件中取一行,并且需要行号才能改变。我可以创建一个int,double,string等,我可以轻松地从外部程序中更改值,但我不知道如何使文件读取器脚本将其中一个作为行号的输入。

        string GetLine(string lineresults, int LineNumber)
    {
      using (var sr = new StreamReader(lineresults)) {
        for (int i = 1; i < line; i++)
          sr.ReadLine();
        return sr.ReadLine();
      }
    }

我在GetLine部分得到分号和预期密码的错误

3 个答案:

答案 0 :(得分:1)

如果你想随机访问,你可以读取所有行并将它们存储在一个数组中,所以File.ReadAllLines(请记住你的变量LineNumber从0开始):

string[] allLines = File.ReadAllLines(pathToFile);
string line = allLines[LineNumber]; // error if less lines, check allLines.Length

另一种更有效的方法是使用延迟加载行的File.ReadLines,然后使用Enumerable.ElementAtElementAtOrDefault来访问行号:

var lines = File.ReadLines(pathToFile);
string line = lines.ElementAtOrDefault(LineNumber); // null if there are less lines

值得注意的是,它会在到达行号或文件末尾之前读取文件。

MSDN:

  

ReadLines和ReadAllLines方法的不同之处如下:使用时   ReadLines,您可以先开始枚举字符串集合   整个系列归还;当你使用ReadAllLines时,你必须   在您可以访问之前等待返回整个字符串数组   数组。因此,当您使用非常大的文件时,   ReadLines可以更高效

答案 1 :(得分:0)

正如@Alex K评论的那样,只需将所有行读入数组,然后获取您所追踪的行。

var lines = System.IO.File.ReadAllLines( filename);
var line = lines[ lineIndex ];

答案 2 :(得分:0)

这个NuGet包非常有助于使用CSV。您可以从中获取单独的行,也可以通过名称或索引获取各个列。在这里查看信息:

[Josh Close - CsvHelper][1]