C#从URL中读取随机行

时间:2017-04-06 10:55:46

标签: c# random webclient

如果您没有解释我的逻辑处理,请跳至TLDR版本。

我一直在摆弄一个执行以下操作的程序: 单击按钮时,从本地存储的文本文档中读取随机行,但无法重复

然而,我不想做的是能够从URL读取,而不是本地存储的解决方案。

所以我的下面的代码是当前的函数,我尝试了什么,以及它产生了什么。

string[] readText = File.ReadAllLines(@"path\file.txt");
Random rnd = new Random();
textBox1.Text=(readText[rnd.Next(readText.Length)]);

当然,所有这一切都是从存储在路径部分中的文件中读取的,然后创建一个随机生成器,并使文本框的输出成为整个文档中的随机行。

我尝试使用网址,部分工作..

WebClient webCon= new WebClient();
string webData = webCon.DownloadString("URL");
textBox1.Text = webData;

后面跟随以生成文档的随机行:

Random rnd = new Random();
textBox1.Text = ((webData[rnd.Next(webData.Length-1)]));

然而这是无效的,然后我必须通过以下方式将char转换为字符串,这导致了一个非常有趣且完全没用的文本框。

Random rnd = new Random();
textBox1.Text = char.ToString((webData[rnd.Next(webData.Length-1)]));

TL; DR版本

我有一个使用以下方法从本地文件读取的程序:

string[] readText = File.ReadAllLines(path)

然后从所述文档生成一个随机行,以显示在文本框中,如下所示:

Random rndm = new Random();
            textBox1.Text=(readText[rndm.Next(readText.Length)]);

然而,从URL(在线文档)中读取我想要它能够做什么。 我尝试使用webClient方法完成此任务,但结果是需要将URL从文本框中的字符串转换为字符串。

WebClient webCon= new WebClient();
string webData = webCon.DownloadString("URL");
textBox1.Text = webData;

我希望这个问题与转贴不太接近,我确保首先彻底检查相关主题并且无法完成我的任务。提前谢谢!

1 个答案:

答案 0 :(得分:0)

如何使用string.Split()方法?它会归结为这样的事情:

//\n denotes the newline caracter
var lines = webData.Split('\n');

您现在可以继续使用lines数组,就像您从文件中获得的结果一样。

我还建议你像这样使用WebClient

using (var webCon = new WebClient()) 
{
    string webData = webCon.DownloadString("URL");
    //process webData
}

using {}部分确保您的WebClient被正确处理(释放资源)。

对你的思考过程有更多解释:
string是由char组成的数组,所以如果你访问里面的一个元素,我将是char类型:

string myVal = "hi mom";
char myChar = myVal[0];

Random对象只应在应用程序中构造一次,因此请确保如果在短时间内生成大量随机数,则重用相同的Random对象(或者您可能会收到多次相同的值)

完整示例:

private static Random _random = new Random();
static void Main(string[] args)
{
    using (var webCon = new WebClient())
    {
        var webData = webCon.DownloadString("http://stackoverflow.com/questions/43253136/");
        var lines = webData.Split('\n');
        var myRandomLine = lines[_random.Next(0, lines.Length - 1)];
        MyTextBlock.Text = myRandomLine;
    }
}