0

当我按下按钮时,会发生以下情况:

HttpWebRequest request = (HttpWebRequest)WebRequest
                                  .Create("http://oldschool.runescape.com/slu");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader sr = new StreamReader(response.GetResponseStream());

richTextBox1.Text = sr.ReadToEnd();
sr.Close();

简而言之,数据被传输到我的文本框(这很好用)

现在,如果我选择世界 78(例如,从组合框中,它将引用该行的最后一位数字)我想获得值 968,如果我选择世界 14,我想获得值 973。

这是打印数据的示例

e(378,true,0,"oldschool78",968,"United States","US","Old School 78");
e(314,true,0,"oldschool14",973,"United States","US","Old School 14");

我可以用什么来阅读这个?

4

1 回答 1

1

所以这里有两个问题,第一个是选对线,然后把号码弄出来。

首先,您需要一种将每一行放入列表的方法,例如使用以下内容:

List<String> lines = new List<String>()
string line = sr.ReadLine();
while(line != null)
{
     lines.Add(line);
     line = sr.ReadLine(); // read the next line
}

然后你需要找到相关的行并从中取出令牌。

可能最简单的方法是,对于每一行,将字符串拆分为 ','、'\"'、'(' 和 ')'(使用 String.Split)。也就是说,我们基本上得到了参数。

例如

foreach(string lineInFile in lines)
{
     // split the string in to tokens
     string[] tokens = lineInFile.Split(',', '\"', '(', ')');
     // based on the sample strings and how we've split this, 
     // we take the 15th entry 
     string endParameter = tokens[15]; //endParamter = "Old School 14"
     ...

我们现在使用正则表达式来提取数字。我们将使用的模式是 d+,即 1 个或多个数字。

     Regex numberFinder = new Regex("\\d+");
     Match numberMatch = numberFinder.Match(endParameter);

     // we assume that there is a match, because if there isn't the string isn't
     // correct, you should do some error handling here

     string matchedNumber = numberMatch.Value;
     int value = Int32.Parse(matchedValue); // we convert the string in to the number
     if(value == desiredValue)
     ...

我们检查该值是否与我们正在寻找的值匹配(例如 14),我们现在需要获取您想要的数字。

我们已经拆分了参数,我们想要的数字是第 8 项(例如 string[] 标记中的索引 7)。因为,至少在你的例子中,这只是一个单独的数字,我们可以解析它来获取 int。

     {
          return Int32.Parse(tokens[7]);
     }
}

再次在这里,我们假设字符串采用您显示的格式,您应该在此处进行错误保护。

于 2013-03-26T23:57:24.580 回答