Подтвердить что ты не робот

Как читать CSV файл по одной строке за раз и анализировать ключевые слова

Я новичок в С#, и я начал использовать StreamReader. Я пытаюсь прочитать файл по одной строке за раз и выводить строку, когда она соответствует определенному ключевому слову, например "I/RPTGEN".

До сих пор я выяснял, как прочитать весь файл в строке, но мне трудно понять, как просто читать его по одной строке за раз.

Мой код до сих пор.

using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication5
{
class Test
{
    public static void Main()
    {
        try
        {
            using (StreamReader sr = new StreamReader("c:/temp/ESMDLOG.csv"))
            {
                String line = sr.ReadToEnd();
                Console.WriteLine(line);

                Console.ReadLine();
            }
        }
        catch (Exception e)
        {
            Console.WriteLine("The File could not be read:");
            Console.WriteLine(e.Message);

            Console.ReadLine();
        }
    }
}
}

Плюс вот пример одной строки в файле.

Консультация, 2/27/2013 12:00:44 AM, I/RPTGEN (cadinterface), I/RPTGEN Ошибка - Ошибка 500 - Внутренняя ошибка сервера - возвращается для запроса отчета (проверьте журнал для URL-адреса).

4b9b3361

Ответ 1

Если ваш файл CSV содержит только одну строку, ReadToEnd может быть приемлемым, но если у вас есть файл журнала, состоящий из нескольких строк, лучше читать строки за строкой с помощью ReadLine StreamReader объект

using (StreamReader sr = new StreamReader("c:/temp/ESMDLOG.csv"))
{
    string currentLine;
    // currentLine will be null when the StreamReader reaches the end of file
    while((currentLine = sr.ReadLine()) != null)
    {
       // Search, case insensitive, if the currentLine contains the searched keyword
       if(currentLine.IndexOf("I/RPTGEN", StringComparison.CurrentCultureIgnoreCase) >= 0)
       {
            Console.WriteLine(currentLine);
       }
    }
}

Ответ 2

Другой способ чтения одной строки за раз:

var searchItem = "Error 500";

var lines = File.ReadLines("c:/temp/ESMDLOG.csv");

foreach (string line in lines)
{
    if (line.Contains(searchItem))
    {
        Console.WriteLine(line);
    }
}