Créé un fichier txt en c
Halicard
Messages postés
79
Date d'inscription
Statut
Membre
Dernière intervention
-
loupius Messages postés 697 Date d'inscription Statut Membre Dernière intervention -
loupius Messages postés 697 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je voudrais juste savoir comment créé un fichier fichier.txt avec un petit programme en c, le plus simple possible, j'ai déjà chercher sur plusieurs forum mais la plupart explique comment ouvrir un fichier, mais je veux le créé. L'ouverture je verrais plus tard.
Merci d'avance
Je voudrais juste savoir comment créé un fichier fichier.txt avec un petit programme en c, le plus simple possible, j'ai déjà chercher sur plusieurs forum mais la plupart explique comment ouvrir un fichier, mais je veux le créé. L'ouverture je verrais plus tard.
Merci d'avance
A voir également:
- Créer un fichier en c
- Fichier bin - Guide
- Creer un fichier .bat - Guide
- Créer un compte google - Guide
- Comment créer un groupe whatsapp - Guide
- Comment réduire la taille d'un fichier - Guide
15 réponses
Salut,
Voici le minimum pour la création ;-))).
Voici le minimum pour la création ;-))).
#include <stdio.h> int main(void) { FILE *fp=fopen("nouveau.txt","w"); if (fp==NULL) { fputs("erreur de création\n",stderr); return 1; } puts("fichier créé"); return 0; }
Ah, je vois mieux ce que tu veux faire.
Ceci devrait répondre à tes besoins.
Par contre, je te conseille vivement l'utilisation de fonctions pour augmenter la lisibilité du code ;-))).
Ceci devrait répondre à tes besoins.
Par contre, je te conseille vivement l'utilisation de fonctions pour augmenter la lisibilité du code ;-))).
#include <stdio.h> int main(void) { FILE *fp; fp=fopen("data.txt","r"); if (fp==NULL) { fputs("erreur d'ouverture\n",stderr); return 1; } else { int i=0; char buffer[5][21]; while(i<5 && fgets(buffer[i],sizeof buffer[i],fp)!=NULL) { int c; char *p; if ((p=strchr(buffer[i],'\n'))!=NULL) *p=0; else while((c=fgetc(fp))!='\n' && c!=EOF); i++; } fclose(fp),fp=NULL; for (i=0;i<5;i++) puts(buffer[i]); } return 0; }
Si on veut réitérer jusqu'à la fin du fichier, il faudra faire une boucle du genre:
Bonne continuation.
int compteur = 0; ... if (fp) { while (fgets (ligne, sizeof ligne, fp)) printf ("%d: %s\n", ++compteur, ligne); fclose (fp); } ...Si je n'ai pas fait d'erreur(s), cela devrait fonctionner.
Bonne continuation.
Attention, pour afficher 20 caractères, il faut un buffer de 21.
Pour afficher les 20 premiers caractères, l'astuce consiste à attendre la fin de ligne '\n' avec des fgetc et redémarrer une lecture du flux avec fgets.
Attention également à bien mettre ton fclose si fp!=NULL sinon le comportement sera indéfini.
Ce qui donne :
Cdlt
Pour afficher les 20 premiers caractères, l'astuce consiste à attendre la fin de ligne '\n' avec des fgetc et redémarrer une lecture du flux avec fgets.
Attention également à bien mettre ton fclose si fp!=NULL sinon le comportement sera indéfini.
Ce qui donne :
#include <stdio.h> int main(void) { FILE *fp; fp=fopen("data.txt","r"); if (fp==NULL) { fputs("erreur d'ouverture\n",stderr); return 1; } else { char buffer[21]; while(fgets(buffer,sizeof buffer,fp)!=NULL) { int c; puts(buffer); while((c=fgetc(fp))!='\n' && c=EOF); } fclose(fp),fp=NULL; } return 0; }
Cdlt
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Merci mais je ne comprend pas trop cette ligne la:
while((c=fgetc(fp))!='\n' && c=EOF);
il y a un while mais rien en dessus.. donc moi cela signifie "si..quelquechose... et dans les accolade du dessou.. alors fais ca" sauf qu'il y a pas d'instruction en dessous.
Et lorsque je compile j'ai une erreur :
"lvalue required as left operand of assignement"
while((c=fgetc(fp))!='\n' && c=EOF);
il y a un while mais rien en dessus.. donc moi cela signifie "si..quelquechose... et dans les accolade du dessou.. alors fais ca" sauf qu'il y a pas d'instruction en dessous.
Et lorsque je compile j'ai une erreur :
"lvalue required as left operand of assignement"
J'ai oublié de mettre le point d'exclamation ^^.
Il s'agit plutôt de : while((c=fgetc(fp))!='\n' && c!=EOF);
Cette ligne-là signifie lit les caractères du fichier jusqu'à la fin de la ligne ('\n') ou la fin du fichier (si dernière ligne).
Ainsi lorsque tu referas un fgets, tu seras sur la ligne suivante, te permettant de reprendre à nouveau les vingt premiers caractères. Si tu enlèves cette ligne, t'auras des problèmes pour des lignes possédant plus de 20 caractères, puisque lors du second fgets les 20 caractères suivants de la ligne seront affichés.
Cdlt
Il s'agit plutôt de : while((c=fgetc(fp))!='\n' && c!=EOF);
Cette ligne-là signifie lit les caractères du fichier jusqu'à la fin de la ligne ('\n') ou la fin du fichier (si dernière ligne).
Ainsi lorsque tu referas un fgets, tu seras sur la ligne suivante, te permettant de reprendre à nouveau les vingt premiers caractères. Si tu enlèves cette ligne, t'auras des problèmes pour des lignes possédant plus de 20 caractères, puisque lors du second fgets les 20 caractères suivants de la ligne seront affichés.
Cdlt
Hum.. ce code m'affiche quelque chose de bizarre.. un '9' , qui est le dernier caractere de ma 5 ème et dernière ligne..
Enfet je me suis peux etre mal expliquer, ce que je veux faire c'est recuperer dans des
char ligne1[20]
char ligne2[20]
char ligne3[20]
char ligne4[20]
char ligne5[20]
Je voudrais donc récupérer les 20 premiers caractères des 5 premières lignes (première et seul, il y aura pas plus de ligne dans le fichier), donc récupérer ceci dans 5 variable (char) différentes. Pour que je puisse les utiliser séparément par la suite en fessant par exemple appel a ligne3...
Enfet je me suis peux etre mal expliquer, ce que je veux faire c'est recuperer dans des
char ligne1[20]
char ligne2[20]
char ligne3[20]
char ligne4[20]
char ligne5[20]
Je voudrais donc récupérer les 20 premiers caractères des 5 premières lignes (première et seul, il y aura pas plus de ligne dans le fichier), donc récupérer ceci dans 5 variable (char) différentes. Pour que je puisse les utiliser séparément par la suite en fessant par exemple appel a ligne3...
Merci pour ce code c'est exactement ce qu'il me fallait, par contre encore un petit souci comme d'habitude, le char buffer[5][21] je l'ai sorti de la fonction et je l'ai mis dans ma structure pour pouvoir utiliser ses ligne récupérer dans chacune de mes fonction.
Dans mon main je fais appel a la fonction "recup" qui est justement le code du dessus, a la fin de la fonction recup il y a un for qui nous affiche les 5 ligne récupérer, et cela marche super bien les 5 ligne apparaissent dans la console.
Dans mon main, juste en dessous de la fonction "recup" j'ai voulu faire une fonction "affiche" j'y ai tout simplement coller les 2 ligne de "for" avec le puts, juste indiquer qu'il s'agit de variable d'une structure donc avec la flèche "->". Et la.. très très étrange, il m'affiche une première ligne vide, et m'affiche bien les 4 suivante comme il faut.
Étrange car dans la fonction du dessus il m'affiche les 5 comme il faut. Je ne vois absolument pas d'où peux venir ce problème bizarre j'ai tout simplement passer d'une fonction a l'autre..
Dans mon main je fais appel a la fonction "recup" qui est justement le code du dessus, a la fin de la fonction recup il y a un for qui nous affiche les 5 ligne récupérer, et cela marche super bien les 5 ligne apparaissent dans la console.
Dans mon main, juste en dessous de la fonction "recup" j'ai voulu faire une fonction "affiche" j'y ai tout simplement coller les 2 ligne de "for" avec le puts, juste indiquer qu'il s'agit de variable d'une structure donc avec la flèche "->". Et la.. très très étrange, il m'affiche une première ligne vide, et m'affiche bien les 4 suivante comme il faut.
Étrange car dans la fonction du dessus il m'affiche les 5 comme il faut. Je ne vois absolument pas d'où peux venir ce problème bizarre j'ai tout simplement passer d'une fonction a l'autre..
Poste ton code, ce sera plus simple pour t'aider ;-))).
PS : n'oublie pas de poster entre deux balises de conservation du texte (à droite du bouton souligné).
PS : n'oublie pas de poster entre deux balises de conservation du texte (à droite du bouton souligné).
Désolé de vous embêter ainsi, j'ai réussi a résoudre le problème après quelque heures de recherche.
Je continue mon projet, je reviendrais en cas de problème, merci d'avance pour toutes ces aides!
Je continue mon projet, je reviendrais en cas de problème, merci d'avance pour toutes ces aides!
Bon voila je reviens a vous, j'ai pas mal avancer mais encore un problème me viens.
Chacune des 5 lignes de mon fichier aura entre 21 et 26 caractères, on ne peu pas le savoir a l'avance quel ligne aura combien. J'ai déjà récupérer les 20 premiers caractères de chaque ligne dans 5 char différents.
Maintenant je voudrais récupérer dans 5 char différents le reste de ses ligne, donc a partir du 21eme caractère jusqu'au \n, enfin le \n j'en ai pas besoin, juste devant. Donc chacun de ses char aura entre 1 et 6 caractères environ.
Comment les récupérer ??
Chacune des 5 lignes de mon fichier aura entre 21 et 26 caractères, on ne peu pas le savoir a l'avance quel ligne aura combien. J'ai déjà récupérer les 20 premiers caractères de chaque ligne dans 5 char différents.
Maintenant je voudrais récupérer dans 5 char différents le reste de ses ligne, donc a partir du 21eme caractère jusqu'au \n, enfin le \n j'en ai pas besoin, juste devant. Donc chacun de ses char aura entre 1 et 6 caractères environ.
Comment les récupérer ??
Salut,
Si tu as compris la logique du programme, tu devrais t'en sortir, c'est pareil.
En gros, dans la condition qui teste la présence du '\n' tu rajoutes, un fgets... et tu supprimes le \n si détecté.
Les tableaux de char auront la forme : char reste[5][8].
Poste le code qu'on puisse te corriger si ça marche pas ;-))).
Si tu as compris la logique du programme, tu devrais t'en sortir, c'est pareil.
En gros, dans la condition qui teste la présence du '\n' tu rajoutes, un fgets... et tu supprimes le \n si détecté.
Les tableaux de char auront la forme : char reste[5][8].
Poste le code qu'on puisse te corriger si ça marche pas ;-))).
Mais en fait mon plus gros souci ce n'est pas de supprimer le \n de la fin, c'est surtout comment commencer a prendre le texte a partir du 21 caractères?
Car dans le code précédant pour prendre les 20 premiers caractères on indique pas qu'on l'on prend a partir du premier...? Ça se fis automatiquement.
Car dans le code précédant pour prendre les 20 premiers caractères on indique pas qu'on l'on prend a partir du premier...? Ça se fis automatiquement.
Mon fichier aura un certain nombre de caracter par ligne, ce nombre sera toujour supperieur a 20, mais moi je veux recuperer les 20 premier caractere de chaque ligne.
J'arrive a recuperer la premiere ligne mais pas les suivantes, J'ai utiliser ce code :
{
char ligne[20];
FILE *fp = fopen ("data.txt", "r");
if (fp != NULL)
{
fgets (ligne, sizeof ligne, fp);
printf ("1: %s\n", ligne);
}
fclose (fp);
}
else
printf ("Erreur d'ouverture du fichier\n");
return 0;
}
Dans la console cela affiche bien les 20 premier caractere de ma premiere ligne de mon fichier, mais comment proseder pour affichier les 20 premier caractere de la seconde ligne ?
Merci d'avance !