1

是否可以根据行读取 csv 文件。就像给出一个行号,它会在 CSV 中检索该特定行。

谢谢

4

5 回答 5

2

如果您只想读取一行文本文件(如 csv),最简单的方法是使用File.ReadLinesand 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),只是尽可能多地读取。

于 2012-09-17T13:30:39.937 回答
0

请使用System.IO.StreamReaderandSystem.IO.StreamWriter将用于读取和写入 csv 文件。他们有ReadLine()WriteLine()方法。

于 2012-09-17T13:23:57.273 回答
0

这取决于你在这里的目标,但你可能应该做类似的事情

   while((line = readFile.ReadLine()) != null)
   {
   //Record line
   }

然后,一旦您将文件数据读入内存,您就可以考虑按行查询。

顺便说一句,你真的应该考虑用谷歌搜索这个,即使是 Bing'ing 它也会给你一个答案。

于 2012-09-17T13:26:19.550 回答
0

如果您的文件不是很大,您可以这样做:

string line10 = File.ReadAllLines(@"<filename>", Encoding.Default).ElementAt(10);
于 2012-09-17T13:30:51.607 回答
0

不确定您的动机是什么-如果是性能,请考虑使用一些数据库...CSV不是数据库,它只是一个大文件...要读取特定的行号,您需要阅读所有前面的行(尽管您不需要完全解析它们)...或将整个文件读入内存File.ReadAllLines- 这为您提供了一个string[]您可以在任何您想要的行访问的文件...或使用File.ReadLines它为您IEnumerable<string>提供可能更节省内存/大文件性能...

于 2012-09-17T13:32:07.430 回答