Как читать 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-адреса).
Ответы
Ответ 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);
}
}