web-dev-qa-db-fra.com

Recherche d'un mot spécifique dans un fichier texte et affichage de la ligne

Je ne parviens pas à trouver des mots dans un fichier texte en C #.

Je veux trouver le mot qui est entré dans la console, puis afficher la ligne entière que le mot a été trouvé sur dans la console.

Dans mon fichier texte, j'ai:

Stephen Haren, décembre, 9,4055551235

Laura Clausing, janvier, 23,4054447788

William Connor, décembre 13, 123456789

Kara Marie, octobre, 23,1593574862

Audrey Carrit, janvier, 16,1684527548

Sebastian Baker, octobre, 23,9184569876

Donc, si je saisis "Décembre", je veux qu'il affiche "Stephen Haren, 9 décembre, 40,4055551235" et "William Connor, 13 décembre, 123456789".

Je pensais utiliser des chaînes mais je me suis dit qu'il devait y avoir un moyen plus simple.

Mon code après réponse:

using System;
using System.IO;
class ReadFriendRecords
{
    public static void Main()
    {
        //the path of the file
        FileStream inFile = new FileStream(@"H:\C#\Chapter.14\FriendInfo.txt", FileMode.Open, FileAccess.Read);
        StreamReader reader = new StreamReader(inFile);
        string record;
        string input;
        Console.Write("Enter Friend's Birth Month >> ");
        input = Console.ReadLine();
        try
        {
            //the program reads the record and displays it on the screen
            record = reader.ReadLine();
            while (record != null)
            {
                if (record.Contains(input))
                {
                    Console.WriteLine(record);
                }
                    record = reader.ReadLine();
            }
        }
        finally
        {
            //after the record is done being read, the progam closes
            reader.Close();
            inFile.Close();
        }
        Console.ReadLine();
    }
}
6
Evan Manning

Parcourez toutes les lignes (StreamReader, File.ReadAllLines, etc.) et vérifiez si line.Contains("December") (remplacez "décembre" par l'entrée utilisateur).

Edit: J'irais avec StreamReader au cas où vous auriez de gros fichiers. Et utilisez IndexOf-Example de @Matias Cicero au lieu de contient pour insensible à la casse .

Console.Write("Keyword: ");
var keyword = Console.ReadLine() ?? "";
using (var sr = new StreamReader("")) {
    while (!sr.EndOfStream) {
        var line = sr.ReadLine();
        if (String.IsNullOrEmpty(line)) continue;
        if (line.IndexOf(keyword, StringComparison.CurrentCultureIgnoreCase) >= 0) {
            Console.WriteLine(line);
        }
    }
}
5
Camo

Que diriez-vous quelque chose comme ça:

//We read all the lines from the file
IEnumerable<string> lines = File.ReadAllLines("your_file.txt");

//We read the input from the user
Console.Write("Enter the Word to search: ");
string input = Console.ReadLine().Trim();

//We identify the matches. If the input is empty, then we return no matches at all
IEnumerable<string> matches = !String.IsNullOrEmpty(input)
                              ? lines.Where(line => line.IndexOf(input, StringComparison.OrdinalIgnoreCase) >= 0)
                              : Enumerable.Empty<string>();

//If there are matches, we output them. If there are not, we show an informative message
Console.WriteLine(matches.Any()
                  ? String.Format("Matches:\n> {0}", String.Join("\n> ", matches))
                  : "There were no matches");

Cette approche est simple et facile à lire, elle utilise LINQ et String.IndexOf au lieu de String.Contains afin que nous puissions faire une recherche sans distinction de casse.

2
Matias Cicero

Comme indiqué par @Rinecamo, essayez ce code:

string toSearch = Console.ReadLine().Trim();

Dans cette ligne de code, vous pourrez lire les entrées utilisateur et les stocker dans une ligne, puis itérer pour chaque ligne:

foreach (string  line in System.IO.File.ReadAllLines(FILEPATH))
{
    if(line.Contains(toSearch))
        Console.WriteLine(line);
}

Remplacez FILEPATH par le chemin absolu ou relatif, par ex. ".\file2Read.txt".

2
insilenzio

Pour trouver du texte dans un fichier, vous pouvez utiliser cet algorithme utiliser ce code dans 

static void Main(string[] args)
    {
    }

essaye celui-là

StreamReader oReader;
if (File.Exists(@"C:\TextFile.txt")) 
{
Console.WriteLine("Enter a Word to search");
string cSearforSomething = Console.ReadLine().Trim();
oReader = new StreamReader(@"C:\TextFile.txt");
string cColl = oReader.ReadToEnd();
string cCriteria = @"\b"+cSearforSomething+@"\b";
System.Text.RegularExpressions.Regex oRegex = new 
System.Text.RegularExpressions.Regex(cCriteria,RegexOptions.IgnoreCase);

int count = oRegex.Matches(cColl).Count;
Console.WriteLine(count.ToString());
}
Console.ReadLine();
0
ishfaq khattak