Creation de N fichiers...

Creation de N fichiers... - C++ - Programmation

Marsh Posté le 11-01-2003 à 19:12:20    

Je souhaiterai creer N fichiers dont le nom est contenu dans un autre fichier.
Par exemple:
un fichier contenant N chaines de caracteres (lundi, mardi, mercredi, etc....)
et au final je souhaiterai obtenir lundi.txt, mardi.txt, etc ...
 
Comment adapter la commande suivante ?
 

Citation :

f = fopen("C:\ ?????.txt", "w" )


 
Le tout en C.
Merci !
 
 
 

Reply

Marsh Posté le 11-01-2003 à 19:12:20   

Reply

Marsh Posté le 11-01-2003 à 19:14:44    

Les noms de futur fichiers contenus dans le premier fichier, ils sont ligne par ligne, ou bout à bout avec caractère séparateur ?
 
Avec QBasic du DOS, ça se fait rapidement, a priori.


Message édité par Carbon_14 le 11-01-2003 à 19:15:35
Reply

Marsh Posté le 11-01-2003 à 19:18:35    

Il sont bien ligne par ligne.

Reply

Marsh Posté le 11-01-2003 à 19:55:28    

Ces fichiers feront 0 octets ?
Le C est obligatoire ? C'est pour un exercice ?

Reply

Marsh Posté le 11-01-2003 à 21:11:14    

Non les fichiers ne feront pas 0 octet car par la suite ils seront remplis.
Et bien oui le C est obligatoire...car je suppose ken C++ c beaucoup plus simple.
Ce ke j'ai donnée tout à l'heure c'etait un exemple...
car concretement j'ai besoin de creer une page HTML avec des liens vers d'autres pages HTML qui contiendront des infos (qui porte le nom contenu ds un fichier).

Reply

Marsh Posté le 11-01-2003 à 21:19:54    

Je me suis fait mon générateur de pages HTML pour mon site ouèbe en QBasic pour aller vite, et les pages dérivent du nom des photos (photo.htm) que j'ai récupéré par la commande Dir *.jpg > liste.txt.
 
Ca ressemble pas mal !!
 
Ca passera en C plus tard (manque de temps entre deux consultation de HFR :D).

Reply

Marsh Posté le 11-01-2003 à 21:31:27    

Ouai c comme sur ton site (y a de tres belle photo au passage).
Mais c pour une autre utilisation.

Reply

Marsh Posté le 11-01-2003 à 21:34:11    

bon j'avais kkes minutes devant moi alors voila :
 

Code :
  1. #include <stdio.h>
  2. #define MAX_TAILLE  9
  3. int main(int argc, char *argv[])
  4. {
  5.     FILE *test;
  6.     FILE * donnee;
  7.     int Nb_fichier=0;
  8.  
  9.   donnee= fopen("donnee.txt","r" );
  10.   if (donnee==NULL)
  11.   {
  12.     printf("Fichier source introuvable" );
  13.   }
  14.  
  15.   while(!feof(donnee))
  16.   {
  17.    
  18.     char fichier[MAX_TAILLE];
  19.  
  20.     fgets(fichier,MAX_TAILLE,donnee);
  21.     printf("Création du fichier %s",fichier);
  22.     test=fopen(fichier,"wt" );
  23.       if (test == NULL)
  24.       {
  25.             printf("Erreur lors de la création du fichier %s",fichier);
  26.       }
  27.    
  28.       Nb_fichier++;
  29.      fclose (test);
  30.   }
  31.  
  32.   fclose (donnee);
  33.  
  34.   printf("Nombre de fichier créer : %d",Nb_fichier);
  35.   system("PAUSE" );
  36.   return 0;
  37. }


 
Amicalement Qxn

Reply

Marsh Posté le 11-01-2003 à 21:37:10    

un petit detail neanmoi ton fichier qui contient les données a savoir le  

Code :
  1. donnee= fopen("donnee.txt","r" );


doit contenir les information ligne a ligne ( sur une ligne uniquement un nom rien de plus)
 
par contre le prog que je t'ai fais comporte kkes limitations (ba vi fo que tu bosse un peu lol ) a savoir que le premier parametre de fopen doit avoir le \0 coller donc tes noms doivent tous avoir la meme taille ( #definie MAX_TAILLE) pask si le "\0" n'est pas juste a coté du nom de fichier le fopen l'acceptera pas mais si tu taff un peu tu peu corriger ca aisement ;)

Reply

Marsh Posté le 11-01-2003 à 21:43:23    

Je n'est pas demandé que tu me le fasse! Mais merci car bon un exemple vaut bien de longue phrases...
 
Merci encore Qxn c bien sympa ;)
 

Reply

Marsh Posté le 11-01-2003 à 21:43:23   

Reply

Marsh Posté le 11-01-2003 à 21:49:20    

FabienM a écrit :

Je n'est pas demandé que tu me le fasse! Mais merci car bon un exemple vaut bien de longue phrases...
 
Merci encore Qxn c bien sympa ;)
 
 


 
ba javais rien a faire c pour ca lol mais tu dois juste faire une fonction en plus pour pouvoir créer des fichier de tailles differente ( je l'ai faite en attendant si tu butte je te la file )
j'espere que tu as compris en regardant le code le but final etant que tu comprenne ;)

Reply

Marsh Posté le 11-01-2003 à 21:54:50    

Pour l'instant juste une petite precision sur

Code :
  1. test=fopen(fichier,"wt" )


à quoi correspond le "t" comme mode d'ecriture ??

Reply

Marsh Posté le 11-01-2003 à 21:56:55    

FabienM a écrit :

Pour l'instant juste une petite precision sur

Code :
  1. test=fopen(fichier,"wt" )


à quoi correspond le "t" comme mode d'ecriture ??


 
t= texte
b= binaire
 
voila ;) man fopen ;)

Reply

Marsh Posté le 11-01-2003 à 22:28:11    

mais là il va me creer des fichiers ki n'auront pas d'extension ??
 
à l'execution j'obtiens erreur sur la creation des fichiers et de plus il me retourne 2N fichiers crée alors ke le fichier de depart en contient ke N...
 
eclaire moi un peu sur cette erreur

Reply

Marsh Posté le 11-01-2003 à 22:33:48    

Faut l'adapter, c'est une "ligne directrice", une arrête, une épure.
 
fgets(fichier,MAX_TAILLE,donnee);
strcat(fichier, ".txt" ); // ajoute .txt à la fin du nom du fichier si y a assez d'espace de prévu (à prévoir sinon écrase mémoire)
printf("Création du fichier %s",fichier);
 
Faudrait ainsi allonger la zone :
char fichier[MAX_TAILLE]; en char fichier[MAX_TAILLE + 4];
 
On peut aussi préciser où on veut le mettre en ajoutant avant le chemin.
 
On pourrait voir les 3 premières lignes de ce fichier pour voir si pas de pb de "dimension" ?
 
Je ne sais plus si fopen peut créer un fichier quand existe pas, ou si ouvre déja existant. Sinon, y a le mode "a" qui crée si existe pas mais ajoute à la fin (append) si existe déja => ""dangereux"".
 
Pour ne pas compter les fichiers en échec, faudrait faire
if (test == NULL)
{
  printf("Erreur lors de la création du fichier %s",fichier);
}
else
{            
  Nb_fichier ++;
}
           


Message édité par Carbon_14 le 11-01-2003 à 22:41:34
Reply

Marsh Posté le 12-01-2003 à 00:17:55    

CARBON_14 a écrit :

Faut l'adapter, c'est une "ligne directrice", une arrête, une épure.

Code :
  1. fgets(fichier,MAX_TAILLE,donnee);
  2. strcat(fichier, ".txt" ); // ajoute .txt à la fin du nom du fichier si y a assez d'espace de prévu (à prévoir sinon écrase mémoire)
  3. printf("Création du fichier %s",fichier);


Faudrait ainsi allonger la zone :

Code :
  1. char fichier[MAX_TAILLE];


 en  

Code :
  1. char fichier[MAX_TAILLE + 4];


 
On peut aussi préciser où on veut le mettre en ajoutant avant le chemin.
 
On pourrait voir les 3 premières lignes de ce fichier pour voir si pas de pb de "dimension" ?
 
Je ne sais plus si fopen peut créer un fichier quand existe pas, ou si ouvre déja existant. Sinon, y a le mode "a" qui crée si existe pas mais ajoute à la fin (append) si existe déja => ""dangereux"".
 
Pour ne pas compter les fichiers en échec, faudrait faire
 

Code :
  1. if (test == NULL)
  2. {
  3.   printf("Erreur lors de la création du fichier %s",fichier);
  4. }
  5. else
  6. {           
  7.   Nb_fichier ++;
  8. }

         


 
ba rien a rajouter l'ami du carbon a tout dis je pense ;)

Reply

Marsh Posté le 12-01-2003 à 12:09:34    

Merci encore a tous les 2.
 
PS: ca ne fait pas bien longtemps ke j'ai commencé à prog en C.


Message édité par FabienM le 12-01-2003 à 12:09:53
Reply

Marsh Posté le 12-01-2003 à 12:14:46    

le mode "t" n'est pas standard et pour tout dire ne sert à rien.
 
le mode d'ouverture pas défaut est toujours le mode texte
 
sur les systemes faisant la différence entre les fichiers textes et les fichiers binaires, le mode "b" permet d'indiquer qu'on veut un mode d'acces binaire
 
 
tu veux du texte, pas de "t"
 
 
 
 

Citation :

t= texte
b= binaire
 
voila ;) man fopen ;)

je sais pas d'ou tu sors ton man toi, mais s'il y figure vraiment "t" il devrait y avoir une indiquation sur la portée de ce mode

Reply

Marsh Posté le 12-01-2003 à 21:36:23    

++Taz a écrit :

le mode "t" n'est pas standard et pour tout dire ne sert à rien.
 
le mode d'ouverture pas défaut est toujours le mode texte
 
sur les systemes faisant la différence entre les fichiers textes et les fichiers binaires, le mode "b" permet d'indiquer qu'on veut un mode d'acces binaire
 
 
tu veux du texte, pas de "t"
 
 
 
 

Citation :

t= texte
b= binaire
 
voila ;) man fopen ;)

je sais pas d'ou tu sors ton man toi, mais s'il y figure vraiment "t" il devrait y avoir une indiquation sur la portée de ce mode


 
 
ba pour ne rien te cacher sur mon man aussi ca y est pas et j'avais fais une recherche vite fais sur mon ami google et j'ai trouvé ca :  
 

Citation :

The mode parameter serves also to specify whether we want to open the file as text or binary, adding t or b characters to this access mode string. t Text mode. In text mode the end of file is assumed to be at first Ctrl-Z character. Some conversions can occur reading and writing with End Of Line / Feedback characters depending on your compiler and your Operating System.  
b Binary mode. End of file is reached at last byte of the file. No conversions.  
This additional t or b characters can be appended to the read/write mode at the end of the string (like "rb", "wt", "r+t", "w+b"...) or can be inserted between the letter and the + character (like "rt+", "wb+" ).
  If t nor b are given, it is used the default method (commonly t). In most compilers this default method is specified by the global variable _fmode defined in stdio.h.  


 
bref je t'en paste qu'un bout mais matte a cette url http://www.cplusplus.com/ref/cstdio/fopen.html
 
javais jamais vu ce t aussi avant de tomber sur ce site;)


Message édité par qxn le 12-01-2003 à 21:38:35
Reply

Marsh Posté le 12-01-2003 à 21:45:43    

"If t nor b are given, it is used the default method (commonly t)."
Généralement, les gens ne mettent rien quand c'est "t", mais ne précisent que quand c'est "b".
Ca ne simplifie pas les lectures de code ! :)

Reply

Marsh Posté le 12-01-2003 à 22:04:52    

ben c++.com se plante, j'ai déjà posté à ce sujet
 
bien que certains manuels décrivent ce mode, il n'est nullement ANSI. pour windows, quand on manipules des ficheirs en mode binaire, on le spécifie, sous *n*x, les fichiers sont de simples suite d'octets, donc lire en "" ou en "b" ne change rien

Reply

Marsh Posté le 12-01-2003 à 22:22:22    

Comme quoi y a du ménage à faire !!
 
Quand on n'est pas du métier, on se fie à ce qui est écrit, et on se faire joyeusement "enduire" d'imprécision. :jap:

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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