[C] Créer des fichiers txt automatiquement ???

Créer des fichiers txt automatiquement ??? [C] - C - Programmation

Marsh Posté le 29-05-2004 à 01:06:04    

Bonjour.
Pour faire des feuilles de stats, je dois faire un fichier content beaucoup de combinaisons. Le problème est que le ficier que j'ai généré pèse 130 Mo et est donc illisible.
Il y a grossomodo 70 étapes importantes dans travail donc je voudrais que à chaque pas de la boucle il crée un nouveau fichier texte fichier_a.txt, a étant le compteur.
 
Bien sur ceci ne marche pas mais c'est pour vous donner une idée :
 

Code :
  1. for (a=1; a<=66 ; a++) {
  2. f=fopen("comb_a.txt","w" );
  3.   if(f==NULL) {
  4.     printf("An error has occurred.\n" );
  5.     return 1;
  6.   }
  7. }


 
Merci  :hello:


Message édité par usa_satriani le 29-05-2004 à 07:13:07

---------------
Ce monde n'est qu'une vaste entreprise à se foutre du monde. Céline
Reply

Marsh Posté le 29-05-2004 à 01:06:04   

Reply

Marsh Posté le 29-05-2004 à 01:12:24    

usa_satriani a écrit :

Bonjour.
Pour faire des feuilles de stats, je dois faire un fichier content beaucoup de combinaisons. Le problème est que le ficier que j'ai généré pèse 130 Mo et est donc illisible.
Il y a grossomodo 70 étapes importantes dans travail donc je voudrais que à chaque pas de la boucle il crait un nouveau fichier texte fichier_a.txt, a étant le compteur.
 
Bien sur ceci ne marche pas mais c'est pour vous donner une idée :
 

Code :
  1. for (a=1; a<=66 ; a++) {
  2. f=fopen("comb_a.txt","w" );
  3.   if(f==NULL) {
  4.     printf("An error has occurred.\n" );
  5.     return 1;
  6.   }
  7. }


 
Merci  :hello:


 

Code :
  1. char *itoa( int i ) ;


est ton amie
 
Ton concatènes ça avec le nom de ton fichier et roulez jeunesse.


Message édité par Toxin le 29-05-2004 à 01:12:41

---------------
"If you can walk away from a landing, it's a good landing. If you use the airplane the next day, it's an outstanding landing." - Chuck Yeager. | Chaîne YT | Photos
Reply

Marsh Posté le 29-05-2004 à 02:26:21    

C'est moi ou il n'y a pas de question?

Reply

Marsh Posté le 29-05-2004 à 03:46:45    

thermocline a écrit :

C'est moi ou il n'y a pas de question?


 
j'allais le dire :D


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le 29-05-2004 à 07:15:46    

je voudrais que à chaque pas de la boucle il crée un nouveau fichier texte fichier_a.txt, a étant le compteur.
Après si on peut faire ça de base, tant mieux :D
 
Je pense avoir piger ce que veut dire Toxin, merci je vais essayer.
:hello:


Message édité par usa_satriani le 29-05-2004 à 07:16:06

---------------
Ce monde n'est qu'une vaste entreprise à se foutre du monde. Céline
Reply

Marsh Posté le 29-05-2004 à 08:56:32    

usa_satriani a écrit :

je voudrais que à chaque pas de la boucle il crée un nouveau fichier texte fichier_a.txt, a étant le compteur.
Après si on peut faire ça de base, tant mieux :D
 
Je pense avoir piger ce que veut dire Toxin, merci je vais essayer.
:hello:


moi pas trop  
j'ai pas trouvé d'aide sur itoa (man itoa), ca doit pas etre du C standard
sinon moi perso j'aurais tout simplement utilisé  
un char[6]
une fonction de concatenation avec la biblio string pour inserer a dans le tablea de caractere et apres j'aurais lancé la creation du fichier  
ou sinon j'aurai carrement creer ma fonction qui permet d'inserer une variable dans la chaine "comb_ .txt"

Reply

Marsh Posté le 29-05-2004 à 09:37:03    

J'essaye plein de truc, j'y arrive pas :cry:
non itoa c pas ANSI.
par contre j'ai trouvé un site sympa : ici


---------------
Ce monde n'est qu'une vaste entreprise à se foutre du monde. Céline
Reply

Marsh Posté le 29-05-2004 à 09:57:18    

Je suis arrivé a faire un truc en pompant sur le site avec sprintf
 

Code :
  1. for ( a = 0; a<4 ; a++) {
  2. i = sprintf(str2, "%i", a);
  3. strcat(str, str2);
  4. }


 
 
Bien sur le problème c'est que il me concatène à la suite :D
Bon c'est pas le drame mais bon... (i est un int bidon en fait)
 
par contre qd je fais fopen(str,"r+" ) il me renvoie NULL


Message édité par usa_satriani le 29-05-2004 à 09:58:35

---------------
Ce monde n'est qu'une vaste entreprise à se foutre du monde. Céline
Reply

Marsh Posté le 29-05-2004 à 10:09:44    

Code :
  1. #include <string.h>
  2. /* reverse: reverse string s in place */
  3. void reverse(char s[])
  4. {
  5. int c, i, j;
  6. for (i = 0, j = strlen(s)-1; i < j; i++, j--) {
  7. c = s[i];
  8. s[i] = s[j];
  9. s[j] = c;
  10. }
  11. }
  12. /* itoa: convert n to characters in s */
  13. void itoa(int n, char s[])
  14. {
  15. int i, sign;
  16. if ((sign = n) < 0) /* record sign */
  17. n = -n; /* make n positive */
  18. i = 0;
  19. do { /* generate digits in reverse order */
  20. s[i++] = n % 10 + '0'; /* get next digit */
  21. } while ((n /= 10) > 0); /* delete it */
  22. if (sign < 0)
  23. s[i++] = '-';
  24. s[i] = '\0';
  25. reverse(s);
  26. }

Reply

Marsh Posté le 29-05-2004 à 10:11:20    

i = sprintf(str2, "%i", a);
     
    strcat(str, str2);
 
-> sprintf(str, "%s%d", a);
 
 
 
 
cai bien mieux, itoa n'étant pas standard

Reply

Marsh Posté le 29-05-2004 à 10:11:20   

Reply

Marsh Posté le 29-05-2004 à 10:22:58    

Merci, je viens d'utiliser un truc ds ce genre (sprintf).
Le problème s'était que à chaque tour de boucle bien sur il me restait le nom entier d'avant avec les strcat déjà effectué. J'ai donc renversé l'ordre : strcat(str2,str) (str=="_comb.txt" )
Le problème ensuite étant de faire le fopen ou il n'aime pas str2 en premier argument :s
merci :jap:


Message édité par usa_satriani le 29-05-2004 à 10:24:07

---------------
Ce monde n'est qu'une vaste entreprise à se foutre du monde. Céline
Reply

Marsh Posté le 29-05-2004 à 10:29:53    

strcat(str2,str) (str=="_comb.txt" )  ... tu crois faire quoi là?

Reply

Marsh Posté le 29-05-2004 à 10:33:17    

non lol pour dire que str est une chaine fixe égale à _comb.txt que je déclare au tout début.
J'ai testé j'ai exactement les noms que je veux, reste à pouvoir faire f=fopen(str2); et àvoir le fichier correspondant dans mon dur.


---------------
Ce monde n'est qu'une vaste entreprise à se foutre du monde. Céline
Reply

Marsh Posté le 29-05-2004 à 11:11:47    

oui c'est ce qui me semblait itoa permet de convertir char en int  
usa_satriani, bien sur ca que ca va concater a a la fin apres.txt
il suffit de lancer 2 fois strstr

Reply

Marsh Posté le 29-05-2004 à 11:24:00    

non mais en fait je met la partie qui contient _comb.txt à la suite et no problemo.
Donc là j'arrive a générer des chaines de caractère convenable pour le nom de chaque fichier texte : 1_comb.txt, ... 70_comb.txt
 
Le problème c'est que j'arrive pas avec fopen à passer en 1° argument la variable qui contient le nom en cours : str2
 
f=fopen(str2,"r+" ); me renvoie NULL :(


---------------
Ce monde n'est qu'une vaste entreprise à se foutre du monde. Céline
Reply

Marsh Posté le 29-05-2004 à 11:26:21    

je  croyais que tu devais le créer le fichier ?
il existe ?

Reply

Marsh Posté le 29-05-2004 à 11:28:15    

Euh non mais je pensais que r+ créait le fichier :D
c sur que si il le cherche je comprend pourquoi j'ai NULL
 
Ah j'ai mis w et ça marche :)
 
merci :jap:


Message édité par usa_satriani le 29-05-2004 à 11:30:33

---------------
Ce monde n'est qu'une vaste entreprise à se foutre du monde. Céline
Reply

Marsh Posté le 29-05-2004 à 13:44:33    

sinon, tu peux pas faire une redirection vers un fichier txt que tu crées?

Reply

Marsh Posté le 29-05-2004 à 14:47:18    

comment ca? tu ve dire invoquer une commande shell avec > ?

Reply

Marsh Posté le 29-05-2004 à 14:57:58    

essaie ca par exemple sous dos  
echo "" > toto.txt
et apres fais dir (ou ls sous linux) pour voire le resultat

Reply

Marsh Posté le 29-05-2004 à 15:07:52    

pourquoi "" ?  
 
echo > toto.txt
 
mais je comprend pas, il ve faire ca depuis son programme, pas depuis un script shell ??
il créé un fichier avec fopen ou est le probleme (la ya un truc qui m'echappe)

Reply

Marsh Posté le 29-05-2004 à 15:08:13    

>toto.txt suffit

Reply

Marsh Posté le 29-05-2004 à 15:13:35    

sauf sous windows

Reply

Marsh Posté le 29-05-2004 à 15:31:13    

a je savais pas que l'on pouvais faire direct
echo > toto.txt
et meme carrement  
> toto.txt sous linux
 
et bien ou c'est que pour creer des fichiers s'est plus facile mais apres tu vas t'embeter ca en dos, je ne sais meme pas si c'est possible, pour concatener un compteur avec le nom du fichier

Reply

Marsh Posté le 29-05-2004 à 15:36:41    

sous windows avec un .bat je pense que oui, mais c'est plus la bonne cat

Reply

Marsh Posté le 01-06-2004 à 17:59:20    

Taz a écrit :

i = sprintf(str2, "%i", a);
    strcat(str, str2);
-> sprintf(str, "%s%d", a);


 
Ta pas oublier un terme là :  

Taz a écrit :

sprintf(str, "%s%d", a);


C'est pas :  sprintf(str, "%s%d",str, a); que tu voulais dire.
ou encore sprintf( str, "comb_%d.txt", a);


Message édité par MK Prog le 01-06-2004 à 18:07:13

---------------
Make a VS Program.
Reply

Marsh Posté le 01-06-2004 à 19:23:19    

si

Reply

Marsh Posté le 02-06-2004 à 14:28:16    

voila


---------------
Make a VS Program.
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed