2014-03-25 116 views
0

有沒有辦法通過CSV文件以隨機順序製作StreamReader ReadLine()StreamReader閱讀隨機行

例子:

StreamReader reader = new StreamReader(File.OpenRead(@"C:\\file.csv")); 
String firstName = reader.ReadLine().ToString(); 
Console.WriteLine(firstName); 
+2

是的。也許你可以告訴我們你試過了什麼? –

+0

你能把整個文件一次加載到內存中嗎?如果你可以很容易,如果你不能這麼做,或者非常緩慢或煩人的代碼。 – CodesInChaos

回答

0

的使用C#Random類來生成您可以使用它來選擇你的文件中的行的隨機數。

File.ReadLines()不必讀取整個文件,你可以使用LINQ來構建查詢來篩選它讀取行:

返回值類型:System.Collections.Generic.IEnumerable所有 的文件的行或查詢結果的行。

但是,在這種情況下,我們需要全部閱讀才能找到行數。

// Read lines 
string[] lines = File.ReadLines(@"C:\file.csv"); 

// Seed a random number in the range 0 to your count 
var r = new Random(); 
int randomNumber = r.Next(0, lines.Length); 

// Read the random line 
string line = lines.Skip(randomNumber - 1).Take(1).First(); 
0

StreamReader是隻能向前,沒有辦法,你可以倒着走,但你可以閱讀所有線路到內存中首先使用File.ReadAllLines

string[] allLines = File.ReadAllLines(@"C:\\file.csv"); 
Random rnd = new Random(); 
List<string> randomLines = new List<string>(allLines.Length); 
for(int i = 0; i < allLines.Length ; i++) 
{ 
    randomLines.Add(allLines[rnd.Next(allLines.Length)]); 
} 
1

的StreamReader讀取每個定義順序。我能想到的是如果文件不是很大

var lines File.ReadAllLines(@"C:\\file.csv") 

Random random = new Random((int)DateTime.Now.Millisecond); 
List<T> sortedList = lines.OrderBy(x => random.Next()).ToList(); 
+0

如果你的隨機數大於你的線數呢? –

+0

沒關係。隨機數字僅用於排序行。所以實際上它只是獲取線條,然後爲其分配一個隨機數字。 – Murdock

+0

我明白了。我不知道如果閱讀一個大文件,然後命令所有行選擇一個隨機行是最好的主意? –