J'essaie de lire un fichier texte pour trouver le nombre de fois qu'une phrase/phrase (/ sous-chaîne?) Se produit. J'ai fait un vrai boulot sur le moment (voir le code ci-dessous), mais comme vous le verrez, cela dépend de quelques déclarations if plutôt maladroites. Je n'ai pas accès aux fichiers Je vais l'utiliser chez moi, j'ai donc utilisé un fichier appelé big.txt et je recherche des expressions comme "et" pour le moment.Recherche d'une phrase dans un fichier texte C++
Idéalement, j'aimerais pouvoir rechercher "ce code d'erreur 1" et renvoyer le nombre de fois qu'il se produit. Toute idée sur la façon dont mon code fonctionnerait de cette façon serait extrêmement utile!
int fileSearch(string errorNameOne, string errorNameTwo, string textFile) {
string output; //variable that will store word from text file
ifstream inFile;
inFile.open(textFile); //open the selected text file
if (!inFile.is_open()) {
cerr << "The file cannot be opened";
exit(1);
}
if (inFile.is_open()) { //Check to make sure the file has opened correctly
while (!inFile.eof()) { //While the file is NOT at the end of the file
inFile >> output; //Send the data from the file to "output" as a string
if (output == errorNameOne) { //Check to look for first word of error code
marker = 1; //If this word is present, set a marker to 1
}
else if (marker == 1) { //If the marker is set to 1,
if (output == errorNameTwo) { //and if the word matches the second error code...
count++; //increse count
}
marker = 0; //either way, set marker to 0 again
}
}
}
inFile.close(); //Close the opened file
return count; //Function returns count of error
}
Je n'arrive pas à comprendre votre problème. Pouvez-vous s'il vous plaît ajouter un exemple avec des données factices comme: quelle est votre entrée et quelle est la sortie attendue. –
Vous dites que vous recherchez cette phrase: "ce code d'erreur 1" mais votre exemple recherche deux phrases l'une après l'autre. Cherchez-vous une ou deux phrases? De plus, quelle est la variable dans le fichier texte? Est-il toujours fixé avec précision ou peut-on changer le nombre d'espaces (par exemple). Est-ce que le nombre est fixé à 1 ou peut-il être d'autres nombres comme: "ce code d'erreur 7"? – Galik
@Galik dans les fichiers journaux réels, la phrase serait lire (par exemple) "Header Tangs Present" puis une charge d'espaces, puis un 1. Il ne peut avoir un 1 ou un 0 et tous les codes d'erreur sont listés ligne par ligne dans ce qui ressemble à une table (mais c'est juste un fichier texte formaté). La raison pour laquelle je cherche deux expressions est que lorsque la chaîne est envoyée à la sortie d'inFile, elle ne fait qu'un seul mot à la fois, donc elle ne reconnaîtra pas le second mot, d'où le marqueur et la vérification du mot suivant. – ElHarvman