DOBON.NET DOBON.NETプログラミング掲示板過去ログ

文字列の比較

環境/言語:[環境(WinXP) 使用言語(C#) .NETFramework(1.1)]
分類:[.NET]

まだプログラミングを始めて間もない入門者なので、よろしくお願いします。

改行区切りのリスト(氏名)ファイルを読み込み、
Comboboxに入っている氏名がリストファイルの中ににあるかどうかを
判定し、あればMessageboxに"見つかりました。"なければ"見つかりません。"
と、表示させたいのですが、うまくいきません。
自分で書いたコードを記載します。
なおこうしたほうが速くなる、こう書いた方がよいなどのご指摘がありましたら、
ぜひご教授よろしくお願いいたします。

const menList = "C:\\menlist.txt";

StreamReader srList = new StreamReader
(menList, System.Text.Encoding.GetEncoding("Shift_JIS"));

string [] recBuff = new string[srList.Peek()];
string n = cmbShikensya.Text;
int i = 0;
int lineCounter = 0;

while ( srList.Peek() >= 0 )
{
recBuff[i] = srList.ReadLine();
i++;
lineCounter++;
}

i = 0;

while( String.Compare(recBuff[i], n) != 0 )
{
i++;

if (i > lineCounter)
{
MessageBox.Show("見つかりません!");
break;
}

MessageBox.Show("見つかりました!");
break;
}


srList.Close();
  • 題名: Re[1]: 文字列の比較
  • 著者: ほくと
  • 日時: 2004/02/05 11:35:00
  • ID: 2377
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
こんなカンジでどうでしょうか?


const string menList = "C:\\menlist.txt";

StreamReader srList = new StreamReader
(menList, System.Text.Encoding.GetEncoding("Shift_JIS"));

string [] recBuff = new string[srList.Peek()];
string n = cmbShikensya.Text;
int i = 0;
int lineCounter = 0;

while ( srList.Peek() >= 0 )
{
recBuff[i] = srList.ReadLine();
i++;
lineCounter++;
}

for(i=0 ;i<=lineCounter;i++)
{
if( String.Compare(recBuff[i], n) == 0 )
{
MessageBox.Show("見つかりました!");
break;
}

if (i == lineCounter)
{
MessageBox.Show("見つかりません!");
break;
}

}



srList.Close();
■No2368に返信(落ち葉さんの記事)
> 改行区切りのリスト(氏名)ファイルを読み込み、
> Comboboxに入っている氏名がリストファイルの中ににあるかどうかを
> 判定し、あればMessageboxに"見つかりました。"なければ"見つかりません。"
> と、表示させたいのですが、うまくいきません。

まず、

>string [] recBuff = new string[srList.Peek()];

の意味が分かりません。ファイルの行数をrecBuffの要素数にしたいのだと思いますが、Peekは全く違うものです。

このコードを拝見されていただく限りでは、ファイルの内容をstring配列に入れる必要性が全く無いようです。ReadLineで読み込んだ行が名前と一致するか調べるだけでよいのではないでしょうか。
ご返信ありがとうございます。

■No2384に返信(管理人さんの記事)
> このコードを拝見されていただく限りでは、ファイルの内容をstring配列に入れる必要性が全く無いようです。ReadLineで読み込んだ行が名前と一致するか調べるだけでよいのではないでしょうか。

もしよろしければ、サンプルコードを記載していただくと幸いかと思います。
よろしくお願いいたします。
こんばんは、落ち葉さん。ピラルクです。

エラー処理も含めて書けば、こういう感じではないでしょうか?

  const string FILEPATH_MEMLIST = @"C:\menlist.txt";
  Encoding FILE_ENCODING = Encoding.GetEncoding("Shift_JIS");

  bool isExist = false;
  try 
  {
    using (StreamReader srList = new StreamReader(FILEPATH_MEMLIST, FILE_ENCODING)) 
    {
      string checkName = comboBox1.Text;
      string listName;
      while ((listName = srList.ReadLine()) != null) 
      {
        if (listName == checkName) 
        {
          isExist = true;
          break;
        }
      }
      srList.Close();
    }
  } 
  catch(Exception ex) {
    MessageBox.Show(ex.Message);
    return;
  }

  MessageBox.Show(isExist ? "見つかりました!": "見つかりません!");
皆様ご返信ありがとうございます。


> エラー処理も含めて書けば、こういう感じではないでしょうか?
>
まさにこの処理を実現した方のです。
ありがとうございます^^

記載していただいたコードを解読し学習したいと思います
  • 題名: Re[5]: 文字列の比較
  • 著者: 落ち葉
  • 日時: 2004/02/09 17:37:28
  • ID: 2428
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
■No2427に返信(落ち葉さんの記事)
> 皆様ご返信ありがとうございます。
>
>
>>エラー処理も含めて書けば、こういう感じではないでしょうか?
>>
> まさにこの処理を実現した方のです。
> ありがとうございます^^
>
> 記載していただいたコードを解読し学習したいと思います
>
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板