0

信じられない、最も簡単なタスクがうまくいかない!

StreamReader-Class を使用して csv ファイルをループし、連想行でキーを見つけたいだけです。例えば:

  1. キー1;値1
  2. キー 2;値 2
  3. キー3;値3

キーが存在する場合は問題ありません。それ以外の場合は EOF に到達する必要がありますが、機能しません!

バッファリングされたデータを破棄すると、毎回 EOF に達します。その結果、キーは見つかりません。

編集:すべての提案がありますが、同じ結果です!

StreamReader reader = null;
if(!string.IsNullOrEmpty(textBox1.Text))
{
    try
    {
        reader = new StreamReader(@"ident.csv", Encoding.ASCII);
        string buffer;
        string[] str = null;

        while((buffer = reader.ReadLine()) != null)
        {
            if(buffer.Contains(";"))
            {
                str = buffer.Split(';');
                if(str[0].Equals(textBox1.Text))
                    break;
            }
        }

        if(reader == null)
        {
            MessageBox.Show("Ident not found!");
            textBox2.Text = "";
        }
        else
        {
            textBox2.Text = str[1];
            Clipboard.SetText(str[1]);
        }
    }
    catch(Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
    finally
    {
        reader.Dispose();
        reader.Close();
    }
}
else
{
    MessageBox.Show("Set ident!");
}
}
4

4 に答える 4

0

非常に奇妙なことに、これは私のPCで機能します。

static void Main(string[] args)
{
    string buffer = string.Empty;
    StreamReader reader = new StreamReader(@"e:\a.csv");
    do
    {
        buffer = reader.ReadLine();
        if (buffer.Contains(";"))
        {

            string[] str = buffer.Split(';');
            if (str[0] == "1")
            {
                Console.WriteLine("ok");
                break;
            }
        }
    }
    while (!reader.EndOfStream);
}

csvに含まれるもの:

1;2;3;4;5;
sdfsdf;sdfsdfcv;aasd;
于 2010-09-17T09:23:35.690 に答える
0

Konerak がコメントで指摘しているように、.equals() を使用して文字列を比較します。たまたま "1" == "1" AND "1".equals("1") の両方が true ですが、これは単なる偶然です (2 番目のコードが機能するのはそのためです)。文字列の等価性の詳細については、こちらを参照してください。

于 2010-09-17T09:31:05.877 に答える
0

ばかげた考えですが、ident.csv またはテキストボックスに余分なスペースが含まれていますか?

次のようなものを試してくださいif(str[0].Trim().Equals(textBox1.Text.Trim()))

于 2010-09-17T12:54:22.470 に答える
0

忘れないでください: ファイルコーディングは読み取りファイルの鍵です! コーディング:UTF8、ASCII、UTF16、GB2312

于 2010-09-17T09:36:29.380 に答える