OVH Cloud OVH Cloud

Oublie total...

6 réponses
Avatar
Mick
Bonjour,
on me demande un petit prog en c mais ca fait des lustres que je n'en ai
plus fais.

Alors ma question.
J'ai un fichier txt avec une list de string...
En fait, il stock une liste de x structure de 23 string séparé par des ";"

champs1:champs2;3;4;5;6;7;8;9;10....
champs1:champs2;3;4;5;6;7;8;9;10....


Comment lire ces données.
Un while not feof, read chaque structure et la stocker dans une structure
temporaire.

Merci de votre aide.

6 réponses

Avatar
Pierre Maurette
Bonjour,
on me demande un petit prog en c mais ca fait des lustres que je n'en ai
plus fais.

Alors ma question.
J'ai un fichier txt avec une list de string...
En fait, il stock une liste de x structure de 23 string séparé par des ";"

champs1:champs2;3;4;5;6;7;8;9;10....
champs1:champs2;3;4;5;6;7;8;9;10....


Comment lire ces données.
Un while not feof, read chaque structure et la stocker dans une structure
temporaire.
Il vaudrait mieux poster sur fr.comp.lang.c

Le code va dépendre de la confiance que vous pouvez mettre dans la
structure du fichier texte, de la portabilité souhaitée également peut-être.
Mon adresse est valide, si vous voulez me mailer un fichier exemple et
ce qu'il faut en sortir, je vous ferai un squelette, l'exercice m'intéresse
--
Pierre

Avatar
Fabien
Mick wrote:
Bonjour,
on me demande un petit prog en c mais ca fait des lustres que je n'en ai
plus fais.

Alors ma question.
J'ai un fichier txt avec une list de string...
En fait, il stock une liste de x structure de 23 string séparé par des ";"

champs1:champs2;3;4;5;6;7;8;9;10....
champs1:champs2;3;4;5;6;7;8;9;10....


Comment lire ces données.
Un while not feof, read chaque structure et la stocker dans une structure
temporaire.

Merci de votre aide.




Bonjour,

Je proposerais l'utilisation de fgets pour lire les lignes une à une et
de strtok pour casser chaque enregistrement et reconsitituer la
structure... C'est le plus simple, mais un bémol tout de même, fgets ne
doit être utilisée que si tu connais la taille maximale des chaînes à
coup sûr... sinon, risque (gros) d'overflows...

@+ Fabien

Avatar
kanze
Fabien wrote:
Mick wrote:

on me demande un petit prog en c mais ca fait des lustres que je
n'en ai plus fais.

Alors ma question. J'ai un fichier txt avec une list de string...
En


fait, il stock une liste de x structure de 23 string séparé par
des


";"

champs1:champs2;3;4;5;6;7;8;9;10....
champs1:champs2;3;4;5;6;7;8;9;10....

Comment lire ces données.
Un while not feof, read chaque structure et la stocker dans une
structure


temporaire.


Je proposerais l'utilisation de fgets pour lire les lignes une à une
et de strtok pour casser chaque enregistrement et reconsitituer la
structure... C'est le plus simple, mais un bémol tout de même,
fgets

ne doit être utilisée que si tu connais la taille maximale des
chaînes

à coup sûr... sinon, risque (gros) d'overflows...


S'il a posté dans fclc++, on peut supposer qu'il cherche une solution
C++. Et getline(), puis un istringstream et getline() avec ';' comme
deuxième paramètre, me semble tout à fait indiqué.

En C, évidemment, il peut faire la même chose avec fgets pour la
première getline, puis sscanf pour la deuxième. La fonction strtok
est à
éviter.

--
James Kanze GABI Software http://www.gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34


Avatar
drkm
Fabien writes:

Je proposerais l'utilisation de fgets pour lire les lignes une à une et
de strtok pour casser chaque enregistrement et reconsitituer la
structure... C'est le plus simple, mais un bémol tout de même, fgets ne
doit être utilisée que si tu connais la taille maximale des chaînes à
coup sûr... sinon, risque (gros) d'overflows...


Pourquoi ne pas utiliser tout simplement std::getline(),
std::string, std::string::find(), et std::string::substr() ? Pourquoi
passer par un std::FILE ?

--drkm

Avatar
Andre Heinen
On 12 Dec 2004 23:37:42 -0800, wrote:

La fonction strtok est à éviter.


Pourquoi?

--
André Heinen
Mon e-mail, encodé ROT13: n qbg urvara ng rhebcrnayvax qbg pbz
La FAQ: http://www.cmla.ens-cachan.fr/Utilisateurs/dosreis/C++/FAQ/

Avatar
Falk Tannhäuser
Andre Heinen wrote:
On 12 Dec 2004 23:37:42 -0800, wrote:
La fonction strtok est à éviter.
Pourquoi?



Il y a quelques années, (j'étais jeune !) j'ai écrit une
fonction comme cela :


void parse(char* str)
{
for(char* tok = strtok(str, ":");
tok != NULL;
tok = strtok(NULL, ";,"))
{
fais_qch_avec(tok);
}
}

Ça marchait à merveille, jusqu'au jour où dans fais_qch_avec(),
je rajoutais un appel à une fonction qui appelait une fonction
qui ... qui elle aussi utilisait strtok() pour parser une autre
chaîne de caractères (et qui elle aussi marchait nickel jusque là) ...

Cela n'était même pas une appli "multithread" !

En C++, maintenant on pourrait utiliser std::string::find_first_of()
afin de réécrire cette boucle.

Falk