20 votes

Comment lire un fichier CSV ligne par ligne et en extraire les mots-clés ?

Je suis novice en C# et j'ai commencé à utiliser StreamReader . J'essaie de lire un fichier une ligne à la fois et d'éditer la ligne lorsqu'elle correspond à un mot clé spécifique comme "I/RPTGEN".

Jusqu'à présent, j'ai trouvé comment lire le fichier entier dans une chaîne de caractères, mais j'ai du mal à trouver comment le lire une ligne à la fois.

Mon code jusqu'à présent est le suivant.

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

De plus, voici un exemple d'une ligne du fichier.

Advisory,2/27/2013 12:00:44 AM,I/RPTGEN (cadinterface),I/RPTGEN Failed - Error 500 - Internal Server Error - returned for a report request (check log for URL).

39voto

Steve Points 96477

Si votre fichier CSV ne contient qu'une seule ligne, la fonction ReadToEnd peut être acceptable, mais si vous avez un fichier journal composé de plus d'une ligne, il est préférable de le lire ligne par ligne en utilisant la fonction ReadLine de la StreamReader objet

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

12voto

ClearLogic Points 1287

Une autre façon de lire une ligne à la fois est :

var searchItem = "Error 500";

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

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X