C# 基于c行读取csv文件#
是否可以基于行读取csv文件。比如给一个行号,它就会在CSV中检索特定的行C# 基于c行读取csv文件#,c#,C#,是否可以基于行读取csv文件。比如给一个行号,它就会在CSV中检索特定的行 谢谢请使用System.IO.StreamReader和System.IO.StreamWriter将用于读取和写入csv文件。它们有ReadLine()和WriteLine()方法 这取决于你在这里的目标,但你可能应该这样做 while((line = readFile.ReadLine()) != null) { //Record line } 然后,一旦将文件数据读入内存,就可以考虑按行查
谢谢请使用
System.IO.StreamReader
和System.IO.StreamWriter
将用于读取和写入csv文件。它们有ReadLine()
和WriteLine()
方法 这取决于你在这里的目标,但你可能应该这样做
while((line = readFile.ReadLine()) != null)
{
//Record line
}
然后,一旦将文件数据读入内存,就可以考虑按行查询。
顺便说一句,你真的应该考虑用谷歌搜索一下,即使是Bing'ing也会给你一个答案。如果你只想读取一行文本文件(如csv),最简单的方法是使用和: 以这种方式使用它:
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));
}
公共静态IEnumerable getFileLines(字符串路径,IEnumerable LineIndex)
{
返回File.ReadLines(path).Where((l,i)=>lineindex.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);
IEnumerable range=可枚举范围(0,10);
IEnumerable lines=getFileLines(@“C:\Temp\CsvFile.csv”,范围);
foreach(行中的字符串行)
控制台写入线(行);
请注意,
File.ReadLines
类似于StreamReader
,它不会立即将整个文件读入内存(如有必要)。如果文件不是很大,可以执行以下操作:
string line10 = File.ReadAllLines(@"<filename>", Encoding.Default).ElementAt(10);
string line10=File.ReadAllLines(@“”,Encoding.Default).ElementAt(10);
<代码> > P >不确定你的动机是什么-如果是性能,考虑使用一些DB…CSV不是数据库,它只是一个大文件。。。要读取特定的行号,您需要读取前面的所有行(尽管您不需要完全解析它们)。。。或者将整个文件读入内存-这将为您提供一个字符串[]
,您可以在任何一行访问它。。。或使用它给你<代码> iQuestaby这可能是更大的内存效率/性能与大文件…< /P>停止阅读时,给定的行数匹配。不确定你的动机是什么-如果它的性能,考虑使用一些DB…CSV不是数据库,它只是一个大文件。。。要读取特定的行号,您需要读取前面的所有行(尽管您不需要完全解析它们)…当使用ElementAtOrDefault或ElementAt。。。是否可以获取csv的一行多行?比如第20-25行?THanks@KalaJ:是的,您只需使用Skip
和Take
,例如:var lines=File.ReadLines(path).Skip(19).Take(6)代码>(20-25->6行)。如果文件少于25行,它甚至不会引发异常,它只会返回存在的内容或可枚举的内容。如果少于20行,则返回空的。@KalaJ:。。。最后使用ToList
创建一个列表
,否则您将遇到文件的问题。ReadLines
在第一次使用时处理底层流(与返回数组的文件.ReadAllLines
相反)。我有一个问题,这些值是逗号分隔的。。。e、 苹果、桔子、葡萄。。。。列表中每个逗号分隔的值都有三个插槽,而不仅仅是一个大字符串?在运行MediansTable=File.ReadLines(filePath,Encoding.Default)之类的命令后,我不断遇到这样的错误:System.Collections.Generic.list`1[System.string]。Skip(41)。Take(23)。ToList();控制台写入线(MediansTable);其中MediansTable是列表MediansTable
string line10 = File.ReadAllLines(@"<filename>", Encoding.Default).ElementAt(10);