2010-09-17 55 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()))