У меня проблема с отображением результата моего поиска в моем listView. У меня есть файл TXT, и я хочу искать только первые слова каждой строки файла. Я не знаю, какое условие мне следует поставить для этого ... Я читал о параметре FirstORDefault, но не работал с моим оператором if. Ниже мой текстовый файл и форма просмотра.

Я надеюсь получить известие от вас .... спасибо. Пожалуйста помоги.

    private void btnSH_Click(object sender, EventArgs e)
    {
        FileStream history = File.Open("C:\\Users\\Sofia\\TestFolder2\\logfile.txt", FileMode.Open, FileAccess.Read);
        StreamReader hRead = new StreamReader(history);
        String viewHistory = hRead.ReadToEnd();
        String[] hArray = viewHistory.Split('\n');

        hRead.Close();
        history.Close();

        if (txtBoxSH2.Text != "")
        {
            string searchString = txtBoxSH2.Text;
            historyLstBox.Items.Clear();

            foreach (string line in hArray)
            {
                if (line.ToUpper().IndexOf(searchString.ToUpper())!= -1)
                {
                    historyLstBox.Items.Add(line);
                }
            }

        }
    }
c#
1
wilmers16 24 Ноя 2014 в 12:35
Если у вас есть слова, разделенные пробелами, вы можете разделить строку пробелами и проверить первый элемент в массиве.
 – 
cbr
24 Ноя 2014 в 12:38

3 ответа

Лучший ответ

Вы можете использовать LINQ для предоставления более чистого кода:

private IEnumerable<string> GetMatchingLines(string filename, string word)
{
    return File.ReadLines(filename)
               .Where(line => string.Equals(line.Split(' ').FirstOrDefault(), 
                                            word,
                                            StringComparison.InvariantCultureIgnoreCase));
}

Затем просто добавьте результат этого метода в historyLstBox.Items.

4
Konrad Kokosa 24 Ноя 2014 в 12:44

Вы можете использовать line.StartsWith (searchString) вместо line.IndexOf (searchString)

http://msdn.microsoft.com/en-us/library/baketfxw(v=vs.110).aspx

1
kmandov 24 Ноя 2014 в 12:39

Я бы использовал для этого File.ReadLines.

 string searchString = txtBoxSH2.Text;
 if (searchString == "")
      return;

 foreach (string line in File.ReadLines("C:\\Users\\Sofia\\TestFolder2\\logfile.txt"))
 {
      if (String.IsNullOrWhitespace(line))
           continue;

      if (line.Split(' ')[0].ToUpper() == searchString)
           historyLstBox.Items.Add(line);
 }
0
cbr 24 Ноя 2014 в 12:47