L'analyse de la chaîne de C#
Donc voici mon problème, je suis en train de récupérer le contenu d'un fichier texte en tant que chaîne de caractères, puis de l'analyser. Ce que je veux, c'est un onglet contenant chaque mot et des mots seulement (pas de vide, pas de retour, pas de \n ...) Ce que je fais est d'utiliser une fonction LireFichier
que me renvoyer la chaîne de caractères contenant le texte à partir du fichier (fonctionne très bien parce qu'il s'affiche correctement) mais quand j'essaie de l'analyser échoue et commencer à faire des enchaînement aléatoire sur ma chaîne et je ne comprends pas pourquoi.
Voici le contenu du fichier texte que j'utilise :
truc,
ohoh,
toto, tata, titi, tutu,
tete,
et voici ma chaîne finale :
;tete;;titi;;tata;;titi;;tutu;
qui devrait être:
truc;ohoh;toto;tata;titi;tutu;tete;
Voici le code que j'ai écrit (en utilisant tous sont ok):
namespace ConsoleApplication1{
class Program
{
static void Main(string[] args)
{
string chemin = "MYPATH";
string res = LireFichier(chemin);
Console.WriteLine("End of reading...");
Console.WriteLine("{0}",res);//The result at this point is good
Console.WriteLine("...starting parsing");
res = parseString(res);
Console.WriteLine("Chaine finale : {0}", res);//The result here is awfull
Console.ReadLine();//pause
}
public static string LireFichier(string FilePath) //Read the file, send back a string with the text
{
StreamReader streamReader = new StreamReader(FilePath);
string text = streamReader.ReadToEnd();
streamReader.Close();
return text;
}
public static string parseString(string phrase)//is suppsoed to parse the string
{
string fin="\n";
char[] delimiterChars = { ' ','\n',',','namespace ConsoleApplication1{
class Program
{
static void Main(string[] args)
{
string chemin = "MYPATH";
string res = LireFichier(chemin);
Console.WriteLine("End of reading...");
Console.WriteLine("{0}",res);//The result at this point is good
Console.WriteLine("...starting parsing");
res = parseString(res);
Console.WriteLine("Chaine finale : {0}", res);//The result here is awfull
Console.ReadLine();//pause
}
public static string LireFichier(string FilePath) //Read the file, send back a string with the text
{
StreamReader streamReader = new StreamReader(FilePath);
string text = streamReader.ReadToEnd();
streamReader.Close();
return text;
}
public static string parseString(string phrase)//is suppsoed to parse the string
{
string fin="\n";
char[] delimiterChars = { ' ','\n',',','\0'};
string[] words = phrase.Split(delimiterChars);
TabToString(words);//I check the content of my tab
for(int i=0;i<words.Length;i++)
{
if (words[i] != null)
{
fin += words[i] +";";
Console.WriteLine(fin);//help for debug
}
}
return fin;
}
public static void TabToString(string[] montab)//display the content of my tab
{
foreach(string s in montab)
{
Console.WriteLine(s);
}
}
}//Fin de la class Program
}
'};
string[] words = phrase.Split(delimiterChars);
TabToString(words);//I check the content of my tab
for(int i=0;i<words.Length;i++)
{
if (words[i] != null)
{
fin += words[i] +";";
Console.WriteLine(fin);//help for debug
}
}
return fin;
}
public static void TabToString(string[] montab)//display the content of my tab
{
foreach(string s in montab)
{
Console.WriteLine(s);
}
}
}//Fin de la class Program
}
OriginalL'auteur WizLiz | 2012-04-11
Vous devez vous connecter pour publier un commentaire.
Essayez ceci:
Ou ceci:
Si c'est la réponse qui vous a aidé, le marquer comme " accepté en cliquant sur le gris de la marque de contrôle près des boutons de vote. Cela permettra de donner à l'auteur la réputation de certains. Il fera aussi sa réponse plus visible par rapport à l'autre, très-voté mais incomplet, de réponses, de sorte qu'il est plus probable que d'autres personnes de lui donner quelques rep.
mise à jour de la réponse avec quelques optimisations 🙂
OriginalL'auteur StaWho
Je pense que votre problème principal est
Fait que près fait le tour, il surmonte la question avec le double ;; dans le final de la chaîne, mais il y a encore de la faute comme un mot manquant dans le fichier txt :
Voir la mine ou StaWho de réponses pour les mots manquants problème.
Holterman: je persiste à ne pas comprendre pourquoi le "truc" et "ohoh" sont disapearing et "tête" se placer au début de la chaîne
Merci beaucoup StaWho m'a donné la solution. Pour tout le monde Merci pour la réponse rapide
OriginalL'auteur Henk Holterman
Vous pouvez essayer d'utiliser la chaîne de fractionnement option pour supprimer les entrées vides pour vous:
Consultez la documentation ici.
OriginalL'auteur Bridge
Votre principal problème est que vous êtes fractionnement sur
\n
, mais les retours à la ligne (lire à partir de votre fichier sont\r\n
.De la sortie de la chaîne de ne contenir l'ensemble de vos articles, mais le
\r
caractères à gauche en elle cause plus tard "lignes" pour remplacer plus tôt "lignes" sur la console.(
\r
est un "retour au début de la ligne" instruction; sans la\n
"passer à la ligne suivante" l'instruction de votre mots de la ligne 1 sont remplacées par celles de la ligne 2, puis ligne 3 et la ligne 4.)Ainsi que le fractionnement sur
\r
ainsi que\n
, vous devez vérifier qu'une chaîne n'est pas null ou vide avant de l'ajouter à votre sortie (ou, de préférence, utiliserStringSplitOptions.RemoveEmptyEntries
comme d'autres l'ont mentionné).OriginalL'auteur Rawling
OriginalL'auteur Ralph Lee