|
|
|
|
Salut à tous !
Je suis étudiant en IUT, et après un projet en script Bash et un en Java, je dois maintenant réaliser un projet en C++.
J'aurai donc quelques questions à poser afin d'avancer dans sa réalisation, sur une étape qui me bloque:
mon programme doit séparer les mots contenus dans une ligne d'un fichier texte; cette ligne est obtenue avec la commande "getline" (pas de problème pour ça, ça fonctionne)
Ce que je voudrais faire, c'est arriver à isoler les mots contenus dans cette ligne, sachant qu'elle peut contenir des symboles, et qu'il faudra en tenir compte (certains ne doivent pas être récupérés, d'autres si)
Par exemple, la ligne peut être une ligne de code en C++, dans ce cas je voudrais récuperer tous les mots qu'elle contient, mais pas les symboles propres au langage (comme
= + . ;etc...).
_
if (compteur != NULL) return true; else return false;
getlineutilisée avec
whileme renvoie les lignes 1 par 1, je voudrais ensuite que ça récupère les mots:
Getline marche très bien c'est ce que j'utilise ;o)
#include <fstream>
...
//ouvrir le fichier
ifstream fichier;
fichier.open("tonfichier", ios::in);
if(fichier.bad()){
cerr<<"Fichier ["<<filename<<"] invalide."<<endl;
exit(-1);
}
//Lire un entier, une chaine un double sur la ligne
int i, string s, double d;
fichier>>i>>s>>d;
fichier.close();
...
b) Utiliser getline + les outils fournis par <string> 2)Méthode C : 1)Utiliser fscanf (pour un fichier) %i %d un entier %lf un flottant ou un double %s une chaine \n retour chariot \t tabulation 2) sscanf (pour une chaine) combiné à un getline()... Exemple :
...
int entier, string chaine, double dbl;
getline(fichier,ligne);
if (sscanf(ligne.c_str(),"%i %s %lf",&entier,&chaine,&dbl)==3)
{
//ok
...
}else{
//pb !
...
}
...
|
Merci beaucoup !
|
Salut.
|
Merci !
|
UP !
char s [200]; mais lorsque je veux récuperer le contenu de ce tableau pour l'écrire dans un nouveau fichier texte, je récupère mon texte suivi de caractères incompréhensibles. Or je n'ai aucun moyen de différencier ces caractères incompréhensibles du texte à conserver, donc je voudrais pouvoir arrèter la lecture à la fin de la chaine voulue ! pour remplir le tableau, j'utilise: string fichier = "fichier.txt";
ofstream ofichier(fichier.c_str());
for(int i = 0 ;i<200;i++)
{
ofichier.put(s[i]);
}
ofichier.close();
Dans la boucle "for", j'ai mis 200 car c'est le nombre maximal de caractères que peut contenir le tableau s[]. Mais dans le fichier de sortie, je récupère systématiquement des caractères incompréhensibles à la suite de ce que je veux conserver. Est-ce qu'il existe une commende du genre "size" ou "getsize" pour un tableau ? Ou comment puis-je arrèter la lecture de ce tableau à l'endroit voulu pour que mon fichier final ne contienne que le texte désiré ? Merci beaucoup pour votre aide ! |
Il existe des fonctions pour savoir la taille d'un tableau, mais dans ton cas, ça retournera 200.
|
Il suffit que quand tu crée ton tableau, tu mette un caractère déterminé à la fin genre : "\0"
|
Merci pour toutes ces réponses ! Et désolé de répondre si tard, mais j'ai été obligé de déplacer mon PC pour bosser, donc je n'avais plus internet pendant ce temps !
|
Salut.
char s[200]; for (int i=0;i<200;i++) s[i]='\0';En initialisant ainsi le tableaux, tu aura toujours le\0 à la fin de ta chaine, et la les méthodes habituel devraient fonctionner Salutation ! Char Snipeur |
Si j'ai bien compris tu veux juste analysé une chaine de textes
|
Pour finir de reprendre ce que tu disais il n'y a pas de mystère.
s[100] = '\0'; Après quoi tu peux faire un strcpy. - Soit une variable n stocke cette longueur de chaîne et lors de ta recopie tu peux utiliser strncpy http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man3/strcpy.3.html Bonne chance |