Comptage du nombre de mots dans un fichier texte
Je suis en train de compter le nombre de mots à partir d'un fichier texte, à savoir ce, pour commencer.
Ceci est un test du nombre de mots du programme. Ce n'est qu'un test. Si votre
le programme fonctionne correctement, vous devez calculer qu'il y a 30
les mots dans ce fichier.
Je suis en utilisant StreamReader pour mettre tout le contenu du fichier dans une chaîne de caractères, et ensuite utiliser .Méthode de fractionnement pour obtenir le nombre de mots, mais je continue à obtenir la bonne valeur quand j'ai compiler et exécuter le programme.
using System;
using System.IO;
class WordCounter
{
static void Main()
{
string inFileName = null;
Console.WriteLine("Enter the name of the file to process:");
inFileName = Console.ReadLine();
StreamReader sr = new StreamReader(inFileName);
int counter = 0;
string delim = " ,.";
string[] fields = null;
string line = null;
while(!sr.EndOfStream)
{
line = sr.ReadLine();
}
fields = line.Split(delim.ToCharArray());
for(int i = 0; i < fields.Length; i++)
{
counter++;
}
sr.Close();
Console.WriteLine("The word count is {0}", counter);
}
}
À la différence des sites de forum, nous n'utilisons pas de "Merci", ou "Toute aide appréciée", ou des signatures sur Stack Overflow. Voir "Doit 'Bonjour', 'merci,' slogans, et les salutations être supprimé de postes?. Aussi, j'ai édité ton titre. Se reporter à la rubrique "si vous avez des questions comprennent “tags” dans leurs titres?", où le consensus est "non, ils ne devraient pas".
OriginalL'auteur user1781027 | 2012-11-05
Vous devez vous connecter pour publier un commentaire.
Essayez d'utiliser l'expression régulière, par exemple:
OriginalL'auteur Kirill Polishchuk
cela devrait fonctionner pour vous:
}
StreamReader.ReadToEnd()
?Que faire si le fichier a 1000 ou 10000 ou 10M mots? Depuis que j'ai commencé le C il y a longtemps, je n'aurais jamais utiliser un ReadToEnd, c'est une habitude de penser que la lecture dans la mémoire de quelque chose qui est dans un fichier dans le cas où je peux le lire en morceaux n'est pas la meilleure option. Aussi cette illustre des OP des erreurs dans le code.
Votre code a fonctionné, mais je ne comprends pas pourquoi. Lorsque j'ai seulement champs de sortie.Longueur, il me donne une valeur de 3. Comment peut-compteur+=champs.Longueur donne 30, lorsque le compteur est initialisé à 0?
Que faire si le fichier est de 10M et a une seule ligne? 🙂 Blague à part, si le fichier était vraiment grand, je voudrais examiner à l'aide de Michael Abrashes approche. Si ce n'était pas que j'avais utiliser
ReadToEnd()
, si votre point dans la lecture de fichiers en morceaux est valide!Bon point pour une seule ligne :-). Jamais pensé à ça, vraiment. Je dois l'essayer. Et je pensais à un bon vieux fscanf() ou fgets() genre de choses. Non pas que l'avancée de la lecture du fichier.
OriginalL'auteur Nikola Davidovic
Quelques conseils.
fields.Length
, incrémenter le compteur. Comment sontfields.Length
et votre compteur liés?OriginalL'auteur Alan
vous avez probablement une erreur, essayez quelque chose comme cela
il n'est pas nécessaire pour parcourir le tableau pour compter les éléments lorsque vous pouvez l'obtenir directement le numéro
ah,k srry je ne regarde pas attentivement assez, c'est parce que lire en ligne ne lit qu'une ligne à la fois, de sorte que vous lisez tous les trois, mais seulement de comptage de la dernière lecture
J'ai changé mon code de façon à ce qu'il est maintenant en ligne += sr.ReadLine + " "; et maintenant sorties de l'ensemble de la chaîne lorsque j'affiche la chaîne de caractères sur la Console.WriteLine. Cependant, il me donne une valeur de 35 lorsque j'essaie d'afficher les champs.Longueur. Aucune idée pourquoi?
combien de mots dans le fichier? 34?
Techniquement 29 mots, mais nous sommes censés pour compter le nombre de 30, comme un mot de trop, donc 30 mots au total.
OriginalL'auteur Ben Glasser
OriginalL'auteur Demon Guru