C#(sharp)从txt文件中读取随机行

3

有谁能告诉我如何从txt文件中读取随机行?我想从txt文件中读取随机行并仅在textBox中显示该行。代码示例将非常有帮助!谢谢!


1
从任意大小的文件中读取随机行,并且不需要将整个文件读入内存即可运行。请访问以下链接获取更多信息:https://dev59.com/HFDTa4cB1Zd3GeqPKJPS#3745973 - Jim Mischel
3个回答

9
var lines = File.ReadAllLines(path);
var r = new Random();
var randomLineNumber = r.Next(0, lines.Length - 1);
var line = lines[randomLineNumber];

1
不要在每次调用时分配 new Random(),如果调用发生得太接近,结果将不是随机的。 应该使用线程静态的 Random。请参见 Random number generator only generating one random number - dbc

2

最简单的解决方案是将所有行读入内存,然后随机选择一行。假设所有行都可以放入内存中。

string[] allLines = File.ReadAllLines(path);
Random rnd1 = new Random();
Console.WriteLine(allLines[rnd1.Next(allLines.Length)]);

数组没有 Count 属性... - Mark Seemann
这不起作用...你缺少了实际从行数组中获取行的部分。还有,Mark说的话也是。 - Cᴏʀʏ

1
这里是代码示例:
        int lineCount = File.ReadAllLines(@"C:\file.txt").Length;
        Random rnd = new Random();
        int randomLineNum = rnd.Next(lineCount);
        int indicator = 0;

        using (var reader = File.OpenText(@"C:\file.txt"))
        {
            while (reader.ReadLine() != null)
            {
                if(indicator==randomLineNum)
                {
                    //do your stuff here
                    break;
                }
                indicator++;
            }
        }

4
为什么您要费力将所有行读入内存,只是为了获取计数,然后重新读取文件以获得您想要的行呢?您可以使用ReadAllLines直接从数组中选择,避免重复读取文件。 - Jim Mischel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接