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

不要忘记:文件编码是读取文件的关键!编码:UTF8、ASCII、UTF16、GB2312

于 2010-09-17T09:36:29.380 回答
0

愚蠢的想法,但 ident.csv 或您的文本框是否包含任何额外的空格?

尝试类似的东西if(str[0].Trim().Equals(textBox1.Text.Trim()))

于 2010-09-17T12:54:22.470 回答
0

很奇怪,这适用于我的电脑:

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") 都是真的,但这只是巧合(这就是第二段代码有效的原因)。更多关于字符串相等的信息

于 2010-09-17T09:31:05.877 回答