OVH Cloud OVH Cloud

Nombre de chaines de caracteres variable

14 réponses
Avatar
Zulfukar Arslan
Bonjour a tous,

Je souhaite enregister le resultat de mes calculs dans un fichier. Le
probleme est que le nombre de colonnes est variable.
Typiquement, voila ce qu'on fait:

f = fopen(resultname,"w");

fprintf(f,"%s %s %s", "colonne1", "colonne2", "colonne3\n" );
fclose(f);

Comment faire pour lui faire comprendre qu'en fait a tel moment je
devrai seulement ecrire:

fprintf(f,"%s %s %s %s %s", "colonne1", "colonne2", "colonne3",
"colonne4","colonne5\n" );

ou encore:

fprintf(f,"%s", "colonne1\n" );


Merci pour les reponses.

10 réponses

1 2
Avatar
Antoine Leca
En news:e0tlm1$2j8$, Zulfukar Arslan va escriure:
Je souhaite enregister le resultat de mes calculs dans un fichier. Le
probleme est que le nombre de colonnes est variable.
Typiquement, voila ce qu'on fait:

fprintf(f,"%s %s %s", "colonne1", "colonne2", "colonne3n" );


fprintf(f,"3;%s;%s;%s", "colonne1", "colonne2", "colonne3n" );


Comment faire pour lui faire comprendre qu'en fait a tel moment je
devrai seulement ecrire:

fprintf(f,"%s %s %s %s %s", "colonne1", "colonne2", "colonne3",
"colonne4","colonne5n" );


fprintf(f,"5;%s;%s;%s;%s;%s", "colonne1", "colonne2", "colonne3",
"colonne4","colonne5n" );


Évidemment, si ';' peut faire partie des libellés, il faut prendre autre
chose. 't' est souvent utilisé à cet effet.


Antoine

Avatar
Vincent Lefevre
Dans l'article <e0tlm1$2j8$,
Zulfukar Arslan écrit:

Comment faire pour lui faire comprendre qu'en fait a tel moment je
devrai seulement ecrire:

fprintf(f,"%s %s %s %s %s", "colonne1", "colonne2", "colonne3",
"colonne4","colonne5n" );

ou encore:

fprintf(f,"%s", "colonne1n" );


En affichant une chaîne à la fois, dans une boucle.

--
Vincent Lefèvre - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / SPACES project at LORIA

Avatar
Harpo
Zulfukar Arslan wrote:

Bonjour a tous,

Je souhaite enregister le resultat de mes calculs dans un fichier. Le
probleme est que le nombre de colonnes est variable.
Typiquement, voila ce qu'on fait:

f = fopen(resultname,"w");

fprintf(f,"%s %s %s", "colonne1", "colonne2", "colonne3n" );
fclose(f);

Comment faire pour lui faire comprendre qu'en fait a tel moment je
devrai seulement ecrire:

fprintf(f,"%s %s %s %s %s", "colonne1", "colonne2", "colonne3",
"colonne4","colonne5n" );


$ man stdarg

voir aussi :
http://www.gnu.org/software/libc/manual/html_node/Variadic-Functions.html

--
http://patrick.davalan.free.fr/

Avatar
Zulfukar Arslan
Antoine Leca wrote:
En news:e0tlm1$2j8$, Zulfukar Arslan va escriure:

Je souhaite enregister le resultat de mes calculs dans un fichier. Le
probleme est que le nombre de colonnes est variable.
Typiquement, voila ce qu'on fait:

fprintf(f,"%s %s %s", "colonne1", "colonne2", "colonne3n" );



fprintf(f,"3;%s;%s;%s", "colonne1", "colonne2", "colonne3n" );



Oui mais ici, tu as gardé les 3 %s %s %s. Et c'est ca que je veux éviter.



Comment faire pour lui faire comprendre qu'en fait a tel moment je
devrai seulement ecrire:

fprintf(f,"%s %s %s %s %s", "colonne1", "colonne2", "colonne3",
"colonne4","colonne5n" );



fprintf(f,"5;%s;%s;%s;%s;%s", "colonne1", "colonne2", "colonne3",
"colonne4","colonne5n" );



pareil


Évidemment, si ';' peut faire partie des libellés, il faut prendre autre
chose. 't' est souvent utilisé à cet effet.


Antoine




Avatar
Zulfukar Arslan
Vincent Lefevre wrote:
Dans l'article <e0tlm1$2j8$,
Zulfukar Arslan écrit:


Comment faire pour lui faire comprendre qu'en fait a tel moment je
devrai seulement ecrire:



fprintf(f,"%s %s %s %s %s", "colonne1", "colonne2", "colonne3",
"colonne4","colonne5n" );



ou encore:



fprintf(f,"%s", "colonne1n" );



En affichant une chaîne à la fois, dans une boucle.




C'est ce que j'étais en train d'essayer....


Avatar
Pierre Maurette
Bonjour a tous,

Je souhaite enregister le resultat de mes calculs dans un fichier. Le
probleme est que le nombre de colonnes est variable.
Typiquement, voila ce qu'on fait:

f = fopen(resultname,"w");

fprintf(f,"%s %s %s", "colonne1", "colonne2", "colonne3n" );
fclose(f);

Comment faire pour lui faire comprendre qu'en fait a tel moment je devrai
seulement ecrire:

fprintf(f,"%s %s %s %s %s", "colonne1", "colonne2", "colonne3",
"colonne4","colonne5n" );

ou encore:

fprintf(f,"%s", "colonne1n" );
Il me semble qu'il y a un problème d'analyse avant tout, et non pas de

codage pur. Dans ce que vous nous communiquez, on ne sait pas ce qui
détermine le nombre de résultats à fprint-er.
Il me semble que vous avez deux grandes options, qui sont dans les
réponses qui vous ont été proposées:
- Appeler fprintf() avec un seul "résultat", en boucle s'il le faut, et
en gérant le n à l'aide d'un compteur (modulo "nombre de résulats par
ligne").
- Wrapper (envelopper) fprintf() dans une fonction à nombre d'arguments
variables. Dans cette fonction, vous devrez fabriquer la chaîne de
format envoyée à fprintf().

--
Pierre Maurette

Avatar
Antoine Leca
En news:e0tpn2$3pr$, Zulfukar Arslan va escriure:
Antoine Leca wrote:
En news:e0tlm1$2j8$, Zulfukar Arslan va escriure:

Je souhaite enregister le resultat de mes calculs dans un fichier.
Le probleme est que le nombre de colonnes est variable.
Typiquement, voila ce qu'on fait:

fprintf(f,"%s %s %s", "colonne1", "colonne2", "colonne3n" );


fprintf(f,"3;%s;%s;%s", "colonne1", "colonne2", "colonne3n" );



Oui


Oui, ou non ?

mais ici, tu as gardé les 3 %s %s %s. Et c'est ca que je veux éviter.


Ah. Et comment dussé-je le deviner ?

Tu aurais écrit

fprintf(f,"%s %s %sn", colonne[1], colonne[2], colonne[3] );

que j'aurais pu faire une réponse différente. par exemple

for(i=1;i<3;++i)
fprintf(f,"%s ",colonne[i]);
fputc('n',f);

(Attention, il y a un espace supplémentaire ; et en C il faut numéroter à
partir de 0). Non ?

Ou alors, nous fournir un petit extrait du fichier que tu veux créer ; ou le
code d'une fonction (moins de 10 lignes) qui montre à quoi tu es arrivé
jusqu'ici...


[...]
pareil


C'est inutile sur Usenet. Reste bref (et élagues les éléments inutiles des
citations précédentes), cela fera gagner du temps à tout le monde.
Merci d'avance.


Antoine



Avatar
Zulfukar Arslan
Finalement, j'ai choisi une solution moins casse-bonbon. Et je demande
un autre coup de main dans le post qui va pas tarder a arriver.


Pierre Maurette wrote:

Bonjour a tous,

Je souhaite enregister le resultat de mes calculs dans un fichier. Le
probleme est que le nombre de colonnes est variable.
Typiquement, voila ce qu'on fait:

f = fopen(resultname,"w");

fprintf(f,"%s %s %s", "colonne1", "colonne2", "colonne3n" );
fclose(f);

Comment faire pour lui faire comprendre qu'en fait a tel moment je
devrai seulement ecrire:

fprintf(f,"%s %s %s %s %s", "colonne1", "colonne2", "colonne3",
"colonne4","colonne5n" );

ou encore:

fprintf(f,"%s", "colonne1n" );


Il me semble qu'il y a un problème d'analyse avant tout, et non pas de
codage pur. Dans ce que vous nous communiquez, on ne sait pas ce qui
détermine le nombre de résultats à fprint-er.
Il me semble que vous avez deux grandes options, qui sont dans les
réponses qui vous ont été proposées:
- Appeler fprintf() avec un seul "résultat", en boucle s'il le faut, et
en gérant le n à l'aide d'un compteur (modulo "nombre de résulats par
ligne").
- Wrapper (envelopper) fprintf() dans une fonction à nombre d'arguments
variables. Dans cette fonction, vous devrez fabriquer la chaîne de
format envoyée à fprintf().




Avatar
Emmanuel Delahaye
Je souhaite enregister le resultat de mes calculs dans un fichier. Le
probleme est que le nombre de colonnes est variable.


tableau, boucle ...

--
A+

Emmanuel Delahaye

Avatar
Pierre Maurette
Finalement, j'ai choisi une solution moins casse-bonbon.
Il eut satisfait ma curiosité de connaître cette solution, tous les

bonbons n'ayant pas la même suceptibilité à la cassure.

casse-bonbon : orthographe correcte dans le cadre des "rectifications
de 1990", heureusement facultatives me semble-t-il. Qui voudrait qu'on
accordât ainsi : un casse-pied, des casse-pieds, un casse-croûte, des
casse-croûtes, une croche-pied, des croche-pieds, un casse-couille, des
casse-couilles, un brise-biroute, des brise-biroutes.
Il est clair que cette règle n'est pas satisfaisante, que la logique
qui nous est chère exige que ces formes soient invariables. On écrira
donc casse-bonbons, de façon invariable. La seule entorse à la logique,
bien compréhensible, c'est que même une dame ou un amputé du testicule
gauche l'écrira de cette façon.

Il fallait que cela soit précisé. Et pour les grincheux, précisons que
si le rapport avec le langage C et sa p..... de norme est lointain, il
est évident.

--
Pierre Maurette

1 2