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

したがって、ここには 2 つの問題があります。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 に答える