我需要从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部分得到分号和预期密码的错误
答案 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.ElementAt
或ElementAtOrDefault
来访问行号:
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]