Строка поиска в * .CSV- - PullRequest
       14

Строка поиска в * .CSV-

0 голосов
/ 17 сентября 2010

Я не могу поверить, самая простая задача не сработает!

Я просто хочу пройтись по CSV-файлу с помощью StreamReader-Class и найти ключ в ассоциативной строке.Например:

  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 ]

0 голосов
/ 17 сентября 2010

Глупо подумал, но есть ли в symb.csv или вашем текстовом поле лишние пробелы?

Попробуйте что-то вроде if(str[0].Trim().Equals(textBox1.Text.Trim()))

0 голосов
/ 17 сентября 2010

Как отмечает Конерак в своем комментарии, используйте .equals () для сравнения строк. Просто так получается, что «1» == «1» И «1» .equals («1») оба верны, но это просто совпадение (вот почему второй фрагмент кода работает). Подробнее о равенстве строк здесь .

0 голосов
/ 17 сентября 2010

Не забывайте: кодировка файла является ключом для чтения файлов! кодировка: UTF8, ASCII, UTF16, GB2312

0 голосов
/ 17 сентября 2010

очень странно, это работает на моем компьютере:

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...