是否可以根据行读取 csv 文件。就像给出一个行号,它会在 CSV 中检索该特定行。
谢谢
如果您只想读取一行文本文件(如 csv),最简单的方法是使用File.ReadLines
and Enumerable.ElementAtOrDefault
:
public static String getFileLine(String path, int indexOfLine)
{
return File.ReadLines(path).ElementAtOrDefault(indexOfLine);
}
以这种方式使用它:
String line = getFileLine(@"C:\Temp\CsvFile.csv", 99);
这将返回第 100 行(或者null
如果少于 100 行)。
这是另一个返回一系列行的类似方法:
public static IEnumerable<String> getFileLines(String path, IEnumerable<int> lineIndices)
{
return File.ReadLines(path).Where((l, i) => lineIndices.Contains(i));
}
返回前 10 行:
IEnumerable<int> range = Enumerable.Range(0,10);
IEnumerable<String> lines = getFileLines(@"C:\Temp\CsvFile.csv", range);
foreach (String line in lines)
Console.WriteLine(line);
请注意,File.ReadLines
它类似于 a StreamReader
,它不会一次将整个文件读入内存(as FileReadAllLines
),只是尽可能多地读取。
请使用System.IO.StreamReader
andSystem.IO.StreamWriter
将用于读取和写入 csv 文件。他们有ReadLine()
和WriteLine()
方法。
这取决于你在这里的目标,但你可能应该做类似的事情
while((line = readFile.ReadLine()) != null)
{
//Record line
}
然后,一旦您将文件数据读入内存,您就可以考虑按行查询。
顺便说一句,你真的应该考虑用谷歌搜索这个,即使是 Bing'ing 它也会给你一个答案。
如果您的文件不是很大,您可以这样做:
string line10 = File.ReadAllLines(@"<filename>", Encoding.Default).ElementAt(10);
不确定您的动机是什么-如果是性能,请考虑使用一些数据库...CSV不是数据库,它只是一个大文件...要读取特定的行号,您需要阅读所有前面的行(尽管您不需要完全解析它们)...或将整个文件读入内存File.ReadAllLines
- 这为您提供了一个string[]
您可以在任何您想要的行访问的文件...或使用File.ReadLines
它为您IEnumerable<string>
提供可能更节省内存/大文件性能...