Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 基于c行读取csv文件#_C# - Fatal编程技术网

C# 基于c行读取csv文件#

C# 基于c行读取csv文件#,c#,C#,是否可以基于行读取csv文件。比如给一个行号,它就会在CSV中检索特定的行 谢谢请使用System.IO.StreamReader和System.IO.StreamWriter将用于读取和写入csv文件。它们有ReadLine()和WriteLine()方法 这取决于你在这里的目标,但你可能应该这样做 while((line = readFile.ReadLine()) != null) { //Record line } 然后,一旦将文件数据读入内存,就可以考虑按行查

是否可以基于行读取csv文件。比如给一个行号,它就会在CSV中检索特定的行


谢谢

请使用
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);