是否可以根据行读取csv文件。就像给出行号一样,它以CSV格式检索该特定行。
由于
答案 0 :(得分:2)
如果您只想阅读文本文件的一行(如csv),最简单的方法是使用File.ReadLines
和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行(如果少于100行,则返回null
。
这是另一种返回一系列行的类似方法:
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
类似于StreamReader
,它不会将所有文件一次性读入内存(如FileReadAllLines
),只需要尽可能多。
答案 1 :(得分:0)
请使用System.IO.StreamReader
,System.IO.StreamWriter
将用于阅读和写入csv文件。他们有ReadLine()
和WriteLine()
方法。
答案 2 :(得分:0)
这取决于你的目标,但你可能会做类似
的事情 while((line = readFile.ReadLine()) != null)
{
//Record line
}
然后,一旦您将文件数据读入内存,就可以考虑按行进行查询。
顺便说一句,你真的应该考虑使用谷歌搜索,即使是Bing'ing也能得到答案。
答案 3 :(得分:0)
如果你的文件不是很大,你可以这样做:
string line10 = File.ReadAllLines(@"<filename>", Encoding.Default).ElementAt(10);
答案 4 :(得分:0)
不确定你的动机是什么 - 如果它的性能,考虑使用一些数据库...一个CSV不是一个数据库,它只是一个大文件...要读取一个特定的行号,你将需要阅读所有前面的行(虽然你不需要完全解析它们)......或者将整个文件读入内存File.ReadAllLines
- 这会给你一个string[]
,你可以在任何你想要的行访问它...或者使用File.ReadLines
,它会为您提供IEnumerable<string>
,这些文件对于大文件可能更具内存效率/效果......