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.

4 réponses

1 2
Avatar
Harpo
Zulfukar Arslan wrote:

Finalement, j'ai choisi une solution moins casse-bonbon.


Maquelle ? C'est bien d'avoir un feedback, pour vous comme pour ceux qui
répondent.

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

Avatar
Harpo
Pierre Maurette wrote:

Finalement, j'ai choisi une solution moins casse-bonbon.



(...)

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.


Elle est casse-bonbpns ?

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


Avatar
Zulfukar Arslan
Harpo wrote:
Zulfukar Arslan wrote:


Finalement, j'ai choisi une solution moins casse-bonbon.



Maquelle ? C'est bien d'avoir un feedback, pour vous comme pour ceux qui
répondent.

Bah je veux bien passer 5 minutes pour expliquer tout ca.


Disons qu'au départ je voulais enregistrer le résultat de mes calculs
dans mon "main".
Et dans ce main, il y a une boucle a l'interieur de laquelle
j'enregistre mes resultats avec un nombre de colonne a chaque fois
different.
Ma premiere question etait donc de savoir comment faire pour faire
comprendre au compilo:

"attention ! je suis dans une boucle ou le nombre de colonnes est variable."

D'où l'impossibilité d'ecrire un truc du genre printf(file, "%f %fn",
float1, float2);


Du coup, et la ca se complique tellement que je ne vois pas comment vous
raconter la suite. Pour ca il faudrait vous expliquer le probleme dans
son ensemble, chose impossible.

Je suis passé par un premier fichier ou je ne mets que 2 colonnes, et
ensuite, j'ecris un petit code qui relie chacune des lignes de ce
deuxieme fichier a une autre ligne d'un autre fichier deja existant, et
qui remplit le tout dans un troisieme.

COMPLIQUE!!


Avatar
Harpo
Zulfukar Arslan wrote:

Harpo wrote:
Zulfukar Arslan wrote:


Finalement, j'ai choisi une solution moins casse-bonbon.



Maquelle ? C'est bien d'avoir un feedback, pour vous comme pour ceux
qui répondent.

Bah je veux bien passer 5 minutes pour expliquer tout ca.


Disons qu'au départ je voulais enregistrer le résultat de mes calculs
dans mon "main".
Et dans ce main, il y a une boucle a l'interieur de laquelle
j'enregistre mes resultats avec un nombre de colonne a chaque fois
different.
Ma premiere question etait donc de savoir comment faire pour faire
comprendre au compilo:


Je ne pense pas que ce soit vraiment au compilo de le faire comprendre,
d'une manière ou d'une autre, il faut faire une boucle.


"attention ! je suis dans une boucle ou le nombre de colonnes est
variable."

D'où l'impossibilité d'ecrire un truc du genre printf(file, "%f %fn",
float1, float2);


Du coup, et la ca se complique tellement que je ne vois pas comment
vous raconter la suite. Pour ca il faudrait vous expliquer le probleme
dans son ensemble, chose impossible.

Je suis passé par un premier fichier ou je ne mets que 2 colonnes, et
ensuite, j'ecris un petit code qui relie chacune des lignes de ce
deuxieme fichier a une autre ligne d'un autre fichier deja existant,
et qui remplit le tout dans un troisieme.

COMPLIQUE!!


Pourquoi faire simple...

La solution de Vincent Leèvre est probablement la plus simple :
int i;
FILE * file;
char * colonne;
.....
// on suppose le fichier ouvert
// tu récupère le nombre de colonnes dans i
for ( ; i--; ) {
int rc;
// tu récupère l'adresse de la colonne dans colonne
rc = fputs( colonne, file );
if ( rc == EOF ) {
fprintf( stderr, "fputs 1: Erreur à l'écriture de
monfichiern" );
abort( );
}
if ( i > 0 ) {
rc = fputs( "t", file );
if ( rc == EOF ) {
fprintf( stderr, "fputs 2; Erreur à l'écriture de
monfichiern" );
abort( );
}
} else {
rc = fputs( "n", file );
if ( rc == EOF ) {
fprintf( stderr, "fputs 3; Erreur à l'écriture de
monfichiern" );
abort( );
}
}
}

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



1 2