Comment créer des fichier text en languag c??

Résolu
sabug Messages postés 21 Date d'inscription   Statut Membre Dernière intervention   -  
mamiemando Messages postés 33766 Date d'inscription   Statut Modérateur Dernière intervention   -
bonjours à tous le mondes et bonne annéeeeee!!!

Voilà mon problème, tout d'abord j'arrive à créer les fichier txt avec leur noms, exemple:
1.txt
2.txt
3.txt....
mais je n'arrive pas à les remplir avec un contenu différent dans chaqun, soit mon contenu de text est écraser dans tous les fichier txt, soit tout est mis bout à bout dans tous les fichier txt.

c a dire que dans 1 je voudrai écrire: X=1 Y=2
dans le 2 : X=2 Y=3
dans le 3 : X=3 Y=4

j'arrive juste à écrire X=3 Y=4 dans les trois fichier, ou alors

X=1 Y=2
X=2 Y=3
X=3 Y=4

dans les trois fichiers txt.

voila ce que jai écris :

for (i=1;i<=3;i=(i+0.1))
{
for (j=2;j<=4;j++)
{
for (k=1;k<=3;k++)
{
sprintf(nomFichier,"%d.txt",k);
fichier = fopen(nomFichier, "w");
fprintf (fichier,"X=%f\n",i);
fprintf (fichier,"Y=%d\n",j);
fclose(fichier);
}
}
}


voilà le w dans cette ligne (fichier = fopen(nomFichier, "w");) écrase tous dans le fichier existant, si on met un "a", à la place tout est écrit a la suite.
mais moi je veux:
X=1 Y=2 dans le 1.txt
X=2 Y=3 dans le 2.txt
X=3 Y=4 dans le 3.txt

voilà je pense que ce n'est pas un problème compliqué mais je suis novice si quelqun pouvait maider, ce serait géant merci.

aller bonne nuit à tous

sabug
A voir également:

6 réponses

mamiemando Messages postés 33766 Date d'inscription   Statut Modérateur Dernière intervention   7 878
 
mais je n'arrive pas à les remplir avec un contenu différent dans chaqun, soit mon contenu de text est écraser dans tous les fichier txt, soit tout est mis bout à bout dans tous les fichier txt.

Il faut juste ouvrir ton fichier en "append" si tu veux écrire au bout d'un fichier déjà pré-rempli.
http://www.manpagez.com/missing.php

FILE *fp = fopen("plop.txt","a");


c'est-à-dire que dans 1 je voudrais écrire: X=1 Y=2
dans le 2 : X=2 Y=3
dans le 3 : X=3 Y=4


#include <stdio.h>  

int main() { 
    FILE *f;  
    char filename[255];  
    int i;  
    for(i = 1; i < 4; ++i) {  
        sprintf((char *) &filename,"%d.txt", i);  
        printf("Je vais écrire %s\n", filename);  
        f = fopen(filename, "w");  
        if (f) { 
            fprintf(f,"X=%d  Y=%d\n", i, i + 1);  
            fclose(f);  
        } else fprintf(stderr, "Erreur pour écrire %s\n", filename); 
    }  
    return 0;  
}


Bonne chance
14
sabug Messages postés 21 Date d'inscription   Statut Membre Dernière intervention   2
 
merci ça marche, j'ai pas encore tous compris, c'est pas encore bien clair dans ma tête mais ça marche aller j'y retourne merci encore, bonne journée.

Sabug
0
mamiemando Messages postés 33766 Date d'inscription   Statut Modérateur Dernière intervention   7 878
 
On utilise un "buffer" (tampon), appelé ici filename, dans lequel on va construire à chaque itération le nom de chaque fichier à créer. On utilise pour cela sprintf et on injecte la valeur courant de i via le "%d".

Ensuite on essaye d'écrire dans ce fichier, pointé par f. S'il a été ouvert avec succès (f != NULL), alors on écrit dans f les valeurs de X et Y qui sont en fait "i" et "i+1". Puis on ferme le fichier.

Sinon on n'est pas parvenu à écrire le fichier. Dans ce cas on affiche un message d'erreur. Comme le fichier n'a pas été ouvert, on n'a pas à le fermer.

On répète le procédé pour chaque valeur de i, puis on quitte le programme proprement.
0
BENJ
 
je souhaite comprendre l'argument "w" ca sert a quoi svp?
f = fopen(filename, "w");
0
mamiemando Messages postés 33766 Date d'inscription   Statut Modérateur Dernière intervention   7 878
 
BENJ : merci d'ouvrir un nouveau fil de discussion la prochaine fois et de regarder le man (par exemple avec google si tu n'es pas sous linux) :

man fopen


Le paramètre "w" sert à dire à fopen d'ouvrir le fichier en écriture (et ça écrase son éventuel contenu, contrairement à "a", le mode append).
0
caennais14000 Messages postés 1 Date d'inscription   Statut Membre Dernière intervention   3
 
#include "entete.h"

FILE* ouvrir_fichier(char *nomfichier)//On passe le nom du fichier "nomfichier" à la fonction "ouvrir_fichier()" qui retourne un identifiant de fichier.
{
FILE* fichier = NULL;
char* extension = ".txt";//On déclare une chaine de caractères "extension" qui contient l'entension d'un fichier texte.
int taille = strlen(nomfichier);//On déclare une variable entière "taille" qui contient la taille du nom entré.
if( (*((nomfichier)+taille-4)!=46) && (*((nomfichier)+taille-3)!=116) && (*((nomfichier)+taille-2)!=120) && (*((nomfichier)+taille-1)!=116))
strcat_s(nomfichier,strlen(nomfichier)+strlen(extension)+1,extension);
//On teste si l'extension a déjà été mise avec le nom, sinon on ajout le ".txt" au nom entré par l'utilisateur.
fopen_s(&fichier,nomfichier,"r");//On ouvre le fichier "nomfichier" d'identifiant "fichier" et l'option "r" avec la fonction "fopen_s()"

if(fichier!=NULL)//On teste si le fichier exite réellement. Si oui on ferme le fichier existant.
{
printf("le fichier existe\n\n");
fclose(fichier);
}
else
{
printf("le fichier n'existe pas, il va le creer\n\n");
}

fopen_s(&fichier,nomfichier,"a");//On crée le fichier "nomfichier" d'identifiant "fichier" et l'option "r" avec la fonction "fopen_s()"
return fichier;//On retourne l'identifiant du fichier.
}

enregistrement saisie_enr()//On déclare un fonction "saisie_enr()" qui retourne une struture de données "enregistrement".
{
enregistrement dossier;//On déclare une structure "dossier".
do
{
printf("\nVeuiller entrer un nom : ");
fflush(stdin);

}while(scanf_s("%29[a-zA-Z]",dossier.nom,30)==0);
//On demande un nom tant que ce que l'utilisateur entre autre chose que des caractères (a->z et A->Z).
//Et on met la chaine dans "dossier.nom" qui appartient à la structure dossier.

do
{
printf("\nVeuiller entrer un prenom : ");
fflush(stdin);
}while(scanf_s("%19[a-zA-Z]",dossier.prenom,20)==0);
//On demande un prénom tant que ce que l'utilisateur entre autre chose que des caractères (a->z et A->Z).
//Et on met la chaine dans "dossier.prenom" qui appartient à la structure dossier.

do
{
printf("\nVeuiller entrer un numero de telephone : ");
fflush(stdin);
}while((scanf_s("%10[0-9]",dossier.num_tel,11)==0) || (strlen(dossier.num_tel)!=10));
//On demande un nom tant que ce que l'utilisateur entre autre chose que des nombre (0->9).
//Et on met la chaine dans "dossier.num_tel" qui appartient à la structure dossier.

do
{
printf("\nVeuiller entrer une adresse e-mail : ");
fflush(stdin);
}while(scanf_s("%29[a-z0-9@.]",dossier.mail,30)==0);
//On demande un nom tant que ce que l'utilisateur entre autre chose que les caractères: a->z, 0->9 et @.
//Et on met la chaine dans "dossier.mail" qui appartient à la structure dossier.

return dossier;//On retourne la structure "dossier".
}

void ajout_enr(FILE* fp)//On passe un pointeur sur un fichier "file" à la fonction "ajout_enr()"
{
enregistrement dossier;//On crée un enregistrement "dossier" qui va contenir les informations.
dossier=saisie_enr();//On appelle la fonction "saisie_enr()" qui nous retourne toutes les informations entrées dans la structure "dossier".
fprintf(fp,"%s\n%s\n%s\n%s\n\n",dossier.nom,dossier.prenom,dossier.num_tel,dossier.mail);//On copie toute la structure avec un fprintf() auquel on passe l'identifiant du fichier et les données de la structure.
}

void affiche_repertoire(char *nomfichier)//On passe le nom du fichier "nomfichier" à la fonction "affiche_repertoire()"
{
FILE *fichier;//On crée un pointeur sur un fichier "fichier"
fopen_s(&fichier,nomfichier,"r");//On ouvre le fichier "nomfichier" d'identifiant "fichier" et l'option "r" avec la fonction "fopen_s()"

int nbr=0;//On déclare une variable entière "nbr" pour calculer le nombre de ligne.
char buf[256];//On déclare un tableau de 256 caractères "buf".
while(fgets(buf,255,fichier) != NULL)//On lit le fichier tant que le fichier est différent de NULL.
{
nbr++;
}

rewind(fichier);//On rembobine le fichier d'identifiatn "fichier" au début avec la fonction "rewind"
char* contenu = (char*)malloc(nbr*255*sizeof(char*));//On déclare un tableau de "nbr" chaines de 255 caractères nommé "contenu".
char c =(char)getc(fichier);//On prends le premier caractère du fichier ayant pour identifiant "fichier" que l'on met dans "c"
contenu[0]=c;//On met le caractère obtenu dans la première case mémoire du tableau "contenu[]".
int i=0;//On déclare une variable "i" à 0 pour avancer dans le tableau.
while(c!=EOF)//Tant que l'on a pas la fin de fichier, on avance dans le fichier pour mettre tous les caractères dans le tableau.
{
i++;
c=(char)getc(fichier);
contenu[i]=c;
}
fclose(fichier);//On ferme le fichier.
contenu[i]='\0';//On met le caractère le fin de chaine à la fin du tableau.
printf("%s",contenu);//On affiche le contenu du fichier qui est dans "contenu".
}

void Tri_repertoire(char *nom_fichier)
{
FILE *fichier;//On crée un pointeur sur un fichier "fichier"
fopen_s(&fichier,nomfichier,"r");//On ouvre le fichier "nomfichier" d'identifiant "fichier" et l'option "r" avec la fonction "fopen_s()"

int i=0,j=0,x=0,nbr_ligne=0,nbr_personne=0;//On déclare 5 variables entières dont 3 pour les boucles et 2 pour calculer les nombre de lignes et de personnes.
char buffer[256];//On déclare un tableau de 256 caractères "buffer".

while(fgets(buffer,255,fichier))//On lit le fichier tant que le fichier est différent de NULL.
{
nbr_ligne++;
}
nbr_personne = nbr_ligne/5;//On calcule le nombre de personne à partir du nombre de lignes.

fseek(fichier,0,SEEK_SET);//On retourne au début du fichier ayant pour identifiant "fichier".

enregistrement *id = (enregistrement*)malloc(nbr_personne*sizeof(enregistrement));//On crée un tableau d'enregistrements pour "nbr_personne" personnes nommé "id"
char* espace[100];//On crée un tableau de 100 chaines de caractères "espace"

for(i=0;i<nbr_personne;i++)//On crée une boucle pour "nbr_personne" personnes. On met chaque personnes dans chaque case mémoire de "id".
{
fgets(id[i].nom,strlen(id[i].nom),fichier);
printf("%s\n",id[i].nom);
fgets(id[i].prenom,strlen(id[i].prenom),fichier);
printf("%s\n",id[i].prenom);
fgets(id[i].num_tel,strlen(id[i].num_tel),fichier);
printf("%s\n",id[i].num_tel);
fgets(id[i].mail,strlen(id[i].mail),fichier);
printf("%s\n",id[i].mail);
fgets(espace[i],255,fichier);
}
fclose(fichier);//On ferme le fichier ayant pour identifiant "fichier".

for(j=0;j<nbr_personne;j++)// On trie chaque personne par la première lettre de chaque nom. On change chaque enregistrement en cas d'inversion
{
for(i=nbr_personne-1;i>j;i--)
{
if(id[i].nom[0]<id[i-1].nom[0])
{
enregistrement tmp;
tmp=id[i];
id[i]=id[i-1];
id[i-1]=tmp;
}
}
}
fopen_s(&fichier,nom_fichier,"w");//On ouvre le fichier "nomfichier" d'identifiant "fichier" et l'option d'écrasement "w" avec la fonction "fopen_s()"
for(i=0;i<nbr_personne;i++)//On crée une boucle pour "nbr_personne" personnes. On enregistre chaque personnes de chaque case mémoire de "id" dans le fichier.
{
fprintf(fichier,"%s",id[i].nom);
fprintf(fichier,"%s",id[i].prenom);
fprintf(fichier,"%s",id[i].num_tel);
fprintf(fichier,"%s",id[i].mail);
fprintf(fichier,"\n");
}
fclose(fichier);//On ferme le fichier ayant pour identifiant "fichier".
}
3
sabug Messages postés 21 Date d'inscription   Statut Membre Dernière intervention   2
 
donc ça marche super merci beaucoup.
0
mamiemando Messages postés 33766 Date d'inscription   Statut Modérateur Dernière intervention   7 878
 
Pas de soucis, si tu as des questions n'hesite pas à les poser
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mickael
 
bonjour je souhaiterez creer un fichier .txt. A linterieur de ce fichier je souhaiterai avoir la ligne d'une page .html. Dans cette page .html il y a qu'une seul ligne donc celle que je voudrai creer an .txt. Il faudrai aussi que cette page .txt sactualise toute les 10 secondes. qq peut maider svp
0
Sabug
 
Là je crois que la "boucle" est bouclé... ;-) Merci à tous pour toutes ces réponses, le sujet est terminé depuis un moment et ces réponses m'ont permis de réaliser un projet de calcul des structure (analyse modale en vibration) en entier et de valider les théories abordées. Merci donc pour ce dernier message qui est très complet et qui permettra certainement à d'autres de revenir sur ce genre de problème.

Bien cordialement,

Sabug.
0