2013-03-21 11 views
10

Sono nuovo in C# e ho iniziato a utilizzare StreamReader. Sto cercando di leggere un file una riga alla volta e di generare la riga quando corrisponde a una parola chiave specifica come "I/RPTGEN".Come leggere un file CSV una riga alla volta e analizzare le parole chiave

Finora ho capito come leggere l'intero file in una stringa, ma ho difficoltà a capire come leggerlo una riga alla volta.

Il mio codice finora è questo.

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(); 
     } 
    } 
} 
} 

Più qui è un esempio di una riga nel file.

consultivo, a 2/27/2013 12:00:44, I/RPTGEN (cadinterface), I/RPTGEN non riuscita - Errore 500 - Internal Server Error - restituiti per una richiesta di relazione (controllare il registro per l'URL) .

+5

@Tosi la sua domanda era nel titolo "Come leggere un file CSV di una riga alla volta e analizzare le parole chiave". Non essere così duro. –

risposta

18

Se il file CSV contiene una sola riga del ReadToEnd potrebbe essere accettabile, ma se si dispone di un file di registro composto da più di una riga allora è meglio leggere riga per riga usando ReadLine dell'oggetto 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); 
     } 
    } 
} 
+0

Grazie a tutti per le risposte. Mi ha permesso di avvicinarmi di più al completamento del mio progetto. – Steve

+0

Che cosa succede se cercavo più parole chiave come data e numero di serie e anche, cosa succede se nel mio CSV ci sono più parole chiave che contengono la data, ad es. ExpirationDate vs. just Date, come controllo le parole chiave da cercare? Grazie mille! –

+0

Siamo spiacenti, ma con le informazioni attuali non posso rispondere. Che dire di una nuova domanda in cui specifichi tutti i requisiti ?. Più persone di me guarderanno al tuo problema. Naturalmente potresti aggiungere un link a questa domanda e, notificarmi con un altro link alla nuova domanda qui. – Steve

6

un altro modo di leggere una riga alla volta è:

var searchItem = "Error 500"; 

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

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