0

テキスト ファイルの検索に助けが必要です。入力値を区切り記号付きの Textfile に保存することができました":"

そして、私の結果のテキストボックスは

friend1:126457890
friend2:123487012
Friend3:798461598

そして今、テキストファイルを検索して結果を表示したいlabels/textbox(read only)

これが検索する私のコードです

 private void btn_search_search_Click(object sender, EventArgs e)
 {
        try
        {
            if (string.IsNullOrEmpty(txt_search.Text))
            {
                lbl_search_error.Text = "Please Enter name to search";
            }
            else
            {
                StreamReader sr = new StreamReader(@"path.txt");

                string line;
                string searchkey = txt_search.Text;
                sr.ReadToEnd();

                while ((line = sr.ReadLine()) != null)
                {

                    if (line.Contains(searchkey))
                        break;
                }
                sr.Close();

                string[] data = line.Split(':');
                txt_result_name.Text = data[0];
                txt_result_phno.Text = data[1];
            }
        }
        catch (Exception ex)
        {
            lbl_search_error.Text = ex.Message;
        }
}

しかし、私は得る

オブジェクト参照がオブジェクト インスタンスに設定されていません

ブレークポイントとチェックを維持しようとしましたが、エラーはこの行にあります

string[] data = line.Split(':');

解決にご協力ください

お時間をいただきありがとうございます

4

3 に答える 3

1

正規表現を使用した別のアプローチを紹介します。

   private void btn_search_search_Click(object sender, EventArgs e)
    {
        StreamReader sr = new StreamReader("Some file");
        string line = sr.ReadLine();
        string name="";
        string number="";
        while (line != null)
        {
            var m = Regex.Match(line, @"([\w]+):([\d]+)<br>");
            if (m.Success)
            {
                name = m.Groups[1].Value; 
                number = m.Groups[2].Value;   // use this name and number variables as per your need
                line = sr.ReadLine();
            }

            else
            {
                line = sr.ReadLine();
            }
        }
    }

これは問題を解決する方法です。質問がある場合は質問してください

于 2012-08-19T06:01:54.287 に答える
1

行 sr.ReadToEnd(); を削除します。

于 2012-08-19T05:40:20.670 に答える
0

lineの値が次の場所にあるため、このエラーが発生していますnullstring[] data = line.Split(':');

という文字列変数を取り、while ループでtotempの値を代入します。後で の代わりにこの変数を使用します。次のようにします。linetempline

 private void btn_search_search_Click(object sender, EventArgs e)
    {
        try
        {
            if (string.IsNullOrEmpty(txt_search.Text))
            {
                lbl_search_error.Text = "Please Enter name to search";
            }
            else
            {

                StreamReader sr = new StreamReader(@"path.txt");

                string line;
                string searchkey = txt_search.Text;
                sr.ReadToEnd();


                string temp;
                while ((line = sr.ReadLine()) != null)
                {
                   if (line.Contains(searchkey))
                   {
                      temp = line;
                      break;
                   }
                }
                sr.Close();

                string[] data = temp.Split(':');
                txt_result_name.Text = data[0];
                txt_result_phno.Text = data[1];
            }
        }
        catch (Exception ex)
        {
            lbl_search_error.Text = ex.Message;
        }
    }
于 2012-08-19T05:34:41.573 に答える