Titof301
Messages postés10Date d'inscriptionsamedi 4 février 2006StatutMembreDernière intervention 5 mai 2007
-
24 mars 2007 à 00:49
Titof301
Messages postés10Date d'inscriptionsamedi 4 février 2006StatutMembreDernière intervention 5 mai 2007
-
1 avril 2007 à 19:03
Salut a tous, j'ai une question a propos des strings et des tokens...
j'ai un fichier txt que j'ouvre et il est repartit ainsi : chiffre phrase(1,2,3... mots) * chiffre
chiffre phrase(1,2,3... mots) * chiffre ETC...
ce que je veut faire c'est rentrer chacune de ces données dans des tableau différents, un pour pour les premiers chiffre, un pour les phrases complètes et un pour les derniers chiffres. Le probleme est comment faire pour incoporer les phrases complete dans chacune des case de mon tableau de caractère (ce qui veut dire sauter les espace et arreter au caractère *)
je sais que c'est avec la fonction strtok mais je sais pas vraiment comment m'y prendre, avoir eu la phrase dans une variable char sa aurait été simple, mais de devoir le faire en lisant le fichier... no comprendo
je rapelle que je ne peut utiliser que la fonction strtok, si jamais il y en avait d'autres...
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 24 mars 2007 à 01:04
Salut:
Tu peux utiliser "strtok" pour découper un phrase en tokens.
Cette fonction est déconseillée pour un programme multi-threads.
Mais si ton programme est un programme ordinaire cette fonction est adéquate sinon crées ta propre version.
________________________________________________________________________________
A.B. :
"Dieu nous donne des mains, mais il ne bâtit pas les ponts
cs_Matt67
Messages postés549Date d'inscriptionsamedi 6 septembre 2003StatutMembreDernière intervention 6 mars 20103 24 mars 2007 à 08:03
Bonjour,
Est ce que ton fichier est volumineux ?
Quelle est la longueur de tes lignes environ, et est ce que ces valeurs varient beaucoup ?
tu dois coder en C ou en C++ ?
Titof301
Messages postés10Date d'inscriptionsamedi 4 février 2006StatutMembreDernière intervention 5 mai 2007 24 mars 2007 à 12:26
Bonjour a vous 2, bon pour ombitious, je sais que je dois utilis mais je ne sais aps comment l'utiliser à partir d'une lecture de fichier et non d'une variable, là est le probleme...
Sinon matt mon fichier est tres petit, il fait a peine 3ko et c'est pour un travail alors je ne prendrai que ce fichier
Pour l'instant, le seule alternative que je vois c'est :
- Lire mon premier chiffre et le mettre dans son tableau- Creer un variable char temporaire que je mettrai dans un while (temp !'*')> lire le fichier et ajouter a chaque fois à l'aide de strcat pour ainsi avoir chacun des titres complets (il s'agit ici de titre de films donc le nombre de mots varies) dans chacun des case correspondantes,
Le probleme, je n'utilisa pas la fonction strtok comme ca... alors que je dois l'utiliser, et de plus je crée une variable pour rien..., alors quelqu'un pourrait me donner un exemple de code pour utiliser strtok a partir d'une lecture de fichier?
Ma fonction qui charge les tableau ressemble a sa (dsl j'ai fait sa vite a matin, ya ptete des chose impossible dans mon code j'y reviendrai ce soir ^^) :
int nb=0;
char *jetonPtr, titre1[20], titre2[20], temp[20];
ifstream film;
film.open("Films.txt",ios::in);
if (!film)
{
cerr << "Erreur ouverture fichier\n";
exit(1);
}
while (!film.eof())
{
film >> numero_film[nb] >> temp;
while (temp != '*')
{
strcat ( titre_film[nb], temp );
film >> temp;
}
film >> annee_film[nb];
nb++;
}
film.close;
return nb;
Vous n’avez pas trouvé la réponse que vous recherchez ?
yann_lo_san
Messages postés1137Date d'inscriptionlundi 17 novembre 2003StatutMembreDernière intervention23 janvier 201626 24 mars 2007 à 12:52
C'est typiquement le cas ou il faudrait utiliser la serialisation.
C'est à dire un flux binaire d'une structure vers le fichier et du fichier vers une structure.
Ce qui évite de 'parser' du texte à tout va !
Sinon la solution est de récuperer ligne par ligne, de créer un ptr vers le début de la ligne, et de le faire avancer selon tes critères d'extraction.
char szLigne[256] = film.getLine();
char temp[128];
char* pStr = szLigne;
int i = 0;
Titof301
Messages postés10Date d'inscriptionsamedi 4 février 2006StatutMembreDernière intervention 5 mai 2007 25 mars 2007 à 01:24
hum... tout d'abord merci de ta réponse, par contre je dois te dire que je suis pas un pro en programmation, alors du coup je saisie pas exactement le fonctionnement du code tu m'as donné. Pour ce qui est de la "serialisation" bah je connais pas alors je vais attendre de le voir en cours.
Bon je vais donner un exemple de mon fichier texte, chose que j'aurais ptete du faire avant... :
19 Le Pianiste * 2002 Thomas Kretschmann, Maureen Lipuran;
12 Pay It Forward * 2000 Haley Joel Osment, Kevin Spacey, Helen Hunt;
Votre programme doit lire ce fichier et
charger dans trois tableaux parallèles, le numéro de film, le titre du film et l’année du film. Il doit aussi en même temps charger dans deux tableaux parallèles le nom de l’acteur ou actrice et le(s) numéro(s) de(s) film(s) dans le(s)quel(s) il ou elle joue. Ce dernier tableau avec les numéros de films pour chaque acteur ou actrice est un tableau d’entiers à deux dimensions.
Bon pour l'instant le tableau des acteurs ont peut laisser faire, je verrai rendu la, mais pour l'instant c'est d'arriver a lire des titres de films avec des espaces et les mettre dans un tableau qui me pose problème. Au fait, j'ai un blanc de mémoire pcq j'ai vu sa en cours, mais 3 tableau en parallele sa veut juste dire que les cases correspondantes a chacun des tableau ont un liens entre elle? (exemple, la case 1 du tableau des 1er chiffres va avec la case 1 du tableau des titres puisque le film 19 c'est le pianiste?) Et un tableau en 2 dimension bah c'est seulement un tableau a doucle indice, du genre un tableau de chaine de caractere (comme dans mon cas celui des titres de films)?
Sinon, c'est pas possible de faire ca avec un strtok? ou alors c'est que c'est plus compliquer avec un fichier ou juste plus long?
Pour ton code, bon tout d'abord les pointeurs je sais plus ou moins ce que c'est et a quoi sa sert, on devrait le voir d'ici pas longtemps, mais bon je vais te dire ce que j'en comprends pour voir si je comprends bien au moins les bases.
Ce que je crois saisir : - char szLigne[256] = film.getLine(); ===> c'est pour incorporer une ligne entierede mon fichier texte dans le char szLigne
- petite parenthèse : Je connais plus ou moins (surtout moins) les pointeurs, mais en gros, un pointeur sa "pointe" vers, dans ce cas ci, le premier charactere de chaque "mot" (par mot j'entend ensemble de caractères séparés chacun par un espace), donc le premier while lit le premier "mot" qui est un chiffre donc nécessairement des qu'il frappe un espace, le chiffre est lu. Et quand tu fait ptr++, si je comprends bien sa veut dire passe au prochain caractères?- int premierNombre atoi(temp);> hum... je suis pas sur de comprendre cette ligne... c'est surtout le "atoi(temp)" que je vois pas...
- En gros selon ton exemple, je me sert d'un char temp[] pour stocker toute mes valeurs, donc je stock au depart le premier chiffre, quand c'est fait je copie la valeur du temp dans la premiere case de mon tableau des premiers chiffres, ensuite j'efface le contenu de temp et je recommence mais cette fois avec le titre du film, un coup rentré au complet je copie son contenue dans la premiere case de mon tableau des titres, j'efface le contenu de temp, ETC... ?
- Et un coup la premiere ligne faite, je fait comment pour passer a la seconde? Pcq dans mon code dans le main, j'appele la fonction charger_tableaux, et je veut que tout ce passe dans cette fonction, et que lorsqu'elle en sort mes tableaux soient tous complets (au pire si faut re-entrer dans la fonction pour passer a la ligne suivant, je mettrai un for dans le main)
donc dsl pour toute c'est question, en espérant que tu puisse y répondre (ou quelqu'un d'autre aussi si sa lui dit )
Titof301
Messages postés10Date d'inscriptionsamedi 4 février 2006StatutMembreDernière intervention 5 mai 2007 25 mars 2007 à 13:18
ah... j'oubliais... j'ai quand meme essayer ton programme que tu m'as donné, en l'analysant je comprends en gros je crois, mais il me donne une erreur :
F:\SCHOOL\SESSION 2\Programmation\TP2\TP2\TP2\tp2.cpp(62) : error C2039: 'getLine' : is not a member of 'basic_ifstream<char,struct std::char_traits<char> >'
Error executing cl.exe.
et cette erreur se situe ici ===> char szLigne[256] = film.getLine();
est-ce pcq j'ai pas les bon #include en haut? y'en faut tu un spécial pour tout ca? pour l'instant j'ai "iostream, iomanip, fstream, cstring (je connais pas vraiment cette dernière mais dans les exemple de mon livre elle y est alors...)