有沒有辦法通過CSV文件以隨機順序製作StreamReader ReadLine()
?StreamReader閱讀隨機行
例子:
StreamReader reader = new StreamReader(File.OpenRead(@"C:\\file.csv"));
String firstName = reader.ReadLine().ToString();
Console.WriteLine(firstName);
有沒有辦法通過CSV文件以隨機順序製作StreamReader ReadLine()
?StreamReader閱讀隨機行
例子:
StreamReader reader = new StreamReader(File.OpenRead(@"C:\\file.csv"));
String firstName = reader.ReadLine().ToString();
Console.WriteLine(firstName);
的使用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();
的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)]);
}
的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();
如果你的隨機數大於你的線數呢? –
沒關係。隨機數字僅用於排序行。所以實際上它只是獲取線條,然後爲其分配一個隨機數字。 – Murdock
我明白了。我不知道如果閱讀一個大文件,然後命令所有行選擇一個隨機行是最好的主意? –
是的。也許你可以告訴我們你試過了什麼? –
你能把整個文件一次加載到內存中嗎?如果你可以很容易,如果你不能這麼做,或者非常緩慢或煩人的代碼。 – CodesInChaos