2015-05-19 46 views
0

我需要从CSV文件中读取1行,并且需要行号才能变化。我可以做一个int,double,字符串等,我可以很容易地从外部程序更改值,但我不知道如何使文件读取器脚本作为行号的输入之一。读取csv文件中的特定行并让行有所不同

 string GetLine(string lineresults, int LineNumber) 
    { 
     using (var sr = new StreamReader(lineresults)) { 
     for (int i = 1; i < line; i++) 
      sr.ReadLine(); 
     return sr.ReadLine(); 
     } 
    } 

而且我得到了函数getline部分错误的分号和closeparens预期

+0

'VAR线= File.ReadAllLines(...)'那么你就可以访问'线[LINE_NUMBER - 1]' –

+2

......或者,如果你不想读整个文件(比如,因为它很大),使用'StreamReader'来读取并丢弃第一个'line_number - 1'行,然后读取并保留line'line_number'行。 – adv12

+0

...或使用Linq'lines.Skip(line_number - 1).Take(1);' – Filburt

回答

1

如果你想随机存取可以读取所有行,并将它们存储在数组中,所以File.ReadAllLines(请记住,您的变量LineNumber开始在0):

string[] allLines = File.ReadAllLines(pathToFile); 
string line = allLines[LineNumber]; // error if less lines, check allLines.Length 

另一个更有效的方法是使用其中File.ReadLines懒负载线,然后使用Enumerable.ElementAtElementAtOrDefault访问的行号:

var lines = File.ReadLines(pathToFile); 
string line = lines.ElementAtOrDefault(LineNumber); // null if there are less lines 

值得注意的是,它读取文件,直到行号或文件结束。

MSDN:

的readlines方法和ReadAllLines方法的区别如下:当您使用 readlines方法,你可以 之前返回整个集合开始枚举字符串的集合;当您使用ReadAllLines时,必须等待返回 数组之前返回整个字符串数组。因此,当您处理非常大的文件时, readlines方法可以更有效地

0

由于@Alexķ评论说简单地读取所有行到一个数组,然后让你在之后的行。

var lines = System.IO.File.ReadAllLines(filename); 
var line = lines[ lineIndex ]; 
0

这个NuGet包对于使用CSVs非常有帮助。您可以从中获取单独的行,以及通过名称或索引获取各个列。点击这里,查看信息:

[Josh Close - CsvHelper][1]