Comment créer des fichier text en languag c?? [Résolu/Fermé]

Signaler
Messages postés
21
Date d'inscription
vendredi 19 janvier 2007
Statut
Membre
Dernière intervention
15 mai 2011
-
Messages postés
29276
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
3 septembre 2020
-
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

6 réponses

Messages postés
29276
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
3 septembre 2020
6 926
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60668 internautes nous ont dit merci ce mois-ci

Messages postés
21
Date d'inscription
vendredi 19 janvier 2007
Statut
Membre
Dernière intervention
15 mai 2011
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
Messages postés
29276
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
3 septembre 2020
6 926
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.
je souhaite comprendre l'argument "w" ca sert a quoi svp?
f = fopen(filename, "w");
Messages postés
29276
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
3 septembre 2020
6 926
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).
Messages postés
1
Date d'inscription
lundi 29 novembre 2010
Statut
Membre
Dernière intervention
29 novembre 2010
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".
}
Messages postés
21
Date d'inscription
vendredi 19 janvier 2007
Statut
Membre
Dernière intervention
15 mai 2011
2
donc ça marche super merci beaucoup.
Messages postés
29276
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
3 septembre 2020
6 926
Pas de soucis, si tu as des questions n'hesite pas à les poser
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
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.