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