StreamReader读取随机行

时间:2014-03-25 08:58:59

标签: c# streamreader

有没有办法通过CSV文件以随机顺序制作StreamReader ReadLine()

示例:

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

3 个答案:

答案 0 :(得分: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();

答案 1 :(得分:0)

使用C#&#39; Random类生成一个随机数,您可以使用该数字从文件中选择一行。

File.ReadLines()不必读取整个文件,您可以使用LINQ构建查询来过滤它读取的行:

  

返回值类型:System.Collections.Generic.IEnumerable All   文件的行,或查询结果的行。

但是,在这种情况下,我们需要全部阅读才能找到行数。

// 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();

答案 2 :(得分: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)]);
}