2015-05-19 45 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]