2010-09-17 35 views
0

我无法相信,最简单的任务是行不通的!Search * in * .CSV-

我只想通过使用StreamReader-Class在csv文件中循环并在关联行中查找关键字。 例如: -

  1. 键1;值1
  2. 键2;值2
  3. KEY3;价值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!"); 
} 
} 
+0

_How_它不起作用?我期待'buffer.Contains()'有一个空引用异常,但为什么我们必须猜测? – 2010-09-17 09:42:32

+0

你有没有试过在str = buffer.Split上放置一个断点(';');看看你真的从文件中得到什么?如果拆分失败,它可能是您的CSV文件中的文件编码,因为SmartJJ建议 – FixerMark 2010-09-17 12:38:04

+0

关于编辑:您想要测试'if(buffer == null)'(不是读取器)。你还不清楚什么是(没有)发生。如果英语有问题,至少应该发布程序的输出。 – 2010-09-17 17:01:15

回答

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; 
+0

不应该'StreamReader'在'using'语句或其他东西?或者至少关闭...... – Svish 2010-09-17 09:30:41

+1

是的,它应该,这是一个例子:) – 2010-09-17 09:34:05

0

由于Konerak在他的评论中指出,使用.equals()比较字符串。 这只是发生,“1”==“1”和“1”.equals(“1”)都是真实的,但这只是一个巧合(这就是为什么第二段代码工作)。更多关于字符串相等here

+0

这些是Java中字符串相等的注释。不是这个C#? – Mizipzor 2010-09-17 09:40:58

0

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

0

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

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