Bidouille avec sscanf [C, C++] - C++ - Programmation
Marsh Posté le 26-06-2002 à 11:16:49
c quoi exactement la structure de ton fichier?
Marsh Posté le 26-06-2002 à 11:19:09
En fait c'est que des champs separes par des ;
Au debut de chaque ligne tu as un code, ensuite selon le code je connais la structure de la ligne.
Ca te suffit comme reponse ?
Marsh Posté le 26-06-2002 à 11:19:26
perso j'utiliserais strtok et atoi plutôt que sscanf
Marsh Posté le 26-06-2002 à 11:25:20
antp a écrit a écrit : perso j'utiliserais strtok et atoi plutôt que sscanf |
Ouai pareil.
Code :
|
Marsh Posté le 26-06-2002 à 11:45:27
antp a écrit a écrit : perso j'utiliserais strtok et atoi plutôt que sscanf |
en C strtok pour separer les champs...
sinon en C++, en mettant ta chaine dans une string, tu pourras recuperer des sous-chaines...
Marsh Posté le 26-06-2002 à 11:52:22
Ben le pb avec strtok c'est qu'il me separe les chaines mais j'ai pas les index
Style blabla;;blabla2
Ben il chope blabla, token suivant blabla, il capte pas le vide, donc ca me va pas.
Marsh Posté le 26-06-2002 à 11:56:22
c'est bizarre, ça doit marcher avec les chaines vides pourtant
Marsh Posté le 26-06-2002 à 11:58:39
Ouai mais c moin pratique que strtok je trouve (peut être une question d'habitude)
Marsh Posté le 26-06-2002 à 12:00:43
Ben je crois pas faire d'erreurs
C'est dommage je sentais que j'etais pas loin avec l'histoire du [^;]
Marsh Posté le 26-06-2002 à 12:00:45
antp a écrit a écrit : c'est bizarre, ça doit marcher avec les chaines vides pourtant |
Non,si tu regarde bien l'algo de strtok tu voit que la fonction saute les champ vide.
Faut que tu fasse un strchr et que tu regarde si la différence d'adresse est > à 1. Si non tu met un espace dans les champ vides et c bon
Marsh Posté le 26-06-2002 à 12:01:49
Code :
|
chaine1 -> Salut les amis
chaine2 -> Cool
chaine3 -> NULL (et plantage au strcpy forcement )
Marsh Posté le 26-06-2002 à 12:30:21
Bon ben je crois que je vais etre oblige de me retaper le fichier caractere par caractere, tu parles d'une facon de programmer...
Marsh Posté le 26-06-2002 à 13:06:19
Godbout a écrit a écrit : Bon ben je crois que je vais etre oblige de me retaper le fichier caractere par caractere, tu parles d'une facon de programmer... |
Meu non.
Essaye avec strchr.
Code :
|
Et tu traite ce qu'il y a entre les deux, ensuite tu fait:
Code :
|
Et tu boucle.
Marsh Posté le 26-06-2002 à 13:32:02
Ouais mais nan, je peux pas faire de boucle a cause des differents champs de ma struct
J'ai deja un algo qui marche mais c'est usine a gaz, je pensais que scanf aurait marche.
Marsh Posté le 26-06-2002 à 15:32:37
Si j'ai bien compris tu connais, à la lecturede la ligne, le nombre de champ et leur types, non? Ben tu met les info de types dans un tableau, tu fait une boucle avec dednas un switch ou un tableau de pointeur de fonction, au choix, qui effectue le traitement adéquat.
Marsh Posté le 26-06-2002 à 15:48:19
letoII a écrit a écrit : Si j'ai bien compris tu connais, à la lecturede la ligne, le nombre de champ et leur types, non? Ben tu met les info de types dans un tableau, tu fait une boucle avec dednas un switch ou un tableau de pointeur de fonction, au choix, qui effectue le traitement adéquat. |
C'est EXACTEMENT ce que j'avais deja fait
Je voulais ameliorer un peu le truc.
Marsh Posté le 26-06-2002 à 15:48:46
BENB a écrit a écrit : pourquoi ne pas utiliser les string et leur find ? |
J'ai essaye mais j'ai vite laisse tomber
Je crois que j'ai bcp de lacune sur tout ce qui est c++, je code encore a la facon iut
Marsh Posté le 26-06-2002 à 15:51:40
Code :
|
et tu retrouves dans le tableau word chacun de tes champs...
Marsh Posté le 26-06-2002 à 16:09:12
Godbout a écrit a écrit : C'est EXACTEMENT ce que j'avais deja fait Je voulais ameliorer un peu le truc. |
je vois pas ce qu'il y a à améliorer. Qu'est ce que tu crois qu'il y a derrière le scanf?
Marsh Posté le 27-06-2002 à 09:13:40
BENB ->
LetoII -> nan ben c'est pas grave en fait tant pis
Marsh Posté le 26-06-2002 à 11:14:24
encore moi
Mais bon la je trouve pas
Voila je recupere des lignes dans un fichier, je connais la struct du fichier.
Donc je fais un fegts et ensuite un sscanf sur la chaine recuperee.
Apres je veux trier les champs, separes par des ;.
Pour les int, etc... c'est ok %d;%d ca fonctionne.
Pour les chaines y a un pb
Forcement les %s s'arretent au space, donc marche pas.
Avec %[^;] ca marche, sauf que quand j'ai un champ vide, (ex blabla;;blabla), ben il s'arrete
Des idees ?
---------------
Super.