根据c#行读取csv文件

时间:2012-09-17 13:20:28

标签: c#

是否可以根据行读取csv文件。就像给出行号一样,它以CSV格式检索该特定行。

由于

5 个答案:

答案 0 :(得分:2)

如果您只想阅读文本文件的一行(如csv),最简单的方法是使用File.ReadLinesEnumerable.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.StreamReaderSystem.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>,这些文件对于大文件可能更具内存效率/效果......