Lire des fichiers en C....
duchnoki
Messages postés
158
Date d'inscription
Statut
Membre
Dernière intervention
-
duchnoki Messages postés 158 Date d'inscription Statut Membre Dernière intervention -
duchnoki Messages postés 158 Date d'inscription Statut Membre Dernière intervention -
Bonjour !
Voilà je voudrai lire un fichier ressemblant à ça...
..en C qui afficherais dans des colonnes différentes de ce qu'il y a marqué dans le fichier séparé par des ; exemple (ce que sa donne après avoir lu le fichier d'avant) :
Dont les | sont les limites des colonnes.
Mon problème n'est pas de l'afficher mais de lire le fichier et stoker les colonnes dans des variables comme colonne1, colonne2, colonne2 etc... (je pense que vous l'avez découverts ;))
Merci de votre aide, Duchnoki !
Voilà je voudrai lire un fichier ressemblant à ça...
TheBoss;Duchnoki;C;C++
..en C qui afficherais dans des colonnes différentes de ce qu'il y a marqué dans le fichier séparé par des ; exemple (ce que sa donne après avoir lu le fichier d'avant) :
|TheBoss|Duchnoki|C|C++|
Dont les | sont les limites des colonnes.
Mon problème n'est pas de l'afficher mais de lire le fichier et stoker les colonnes dans des variables comme colonne1, colonne2, colonne2 etc... (je pense que vous l'avez découverts ;))
Merci de votre aide, Duchnoki !
A voir également:
- Lire des fichiers en C....
- Lire le coran en français pdf - Télécharger - Histoire & Religion
- Lire fichier epub - Guide
- Lire fichier bin - Guide
- Renommer des fichiers en masse - Guide
- Lire fichiers rar - Guide
5 réponses
Voici le code :
Et la dernière ligne marche ;-))).
#include <stdio.h> #include <stdlib.h> int main(void) { FILE *fp; fp=fopen("./coucou.txt","r"); if(fp==NULL) { fputs("erreur à l'ouverture du fichier\n",stderr); return EXIT_FAILURE; } else { int c; while((c=fgetc(fp))!=EOF) putchar(c==';'?'|':c); fclose(fp); return 0; } }
Et la dernière ligne marche ;-))).
C'est bon merci :
FILE *fle; int n = 0; char ligne[256]; char total[256]; fle = fopen("./flights.lst", "r"); if(fle == NULL) { printf("E : Can't open \"flights.lst\"\n"); return 1; } printf("I : Reading \"flights.lst\"\n"); while(fgets(ligne, 256, fle) != NULL) { printf("I : Readed : %s\n", ligne); int z=0; while(ligne[z] != NULL) { total[z] = ligne[z]; z++; } ligne[z] = "\n"; n++; } printf("I : %d lines sucessfull readed !\n", n); fclose(fle); char *colonne[8]; colonne[0] = strtok(total, ";"); colonne[1] = strtok(NULL, ";"); printf("I : %s\n", colonne[0]); printf("I : %s\n", colonne[1]);
Ton code est incorrect.
while(ligne[z] != NULL)
ligne[z] n'est pas un tableau mais un char. Autrement dit ligne est un tableau de char. Tu compares donc un char avec NULL... D'autant plus tu parcours caractère par caractère après avoir lu la chaine entièrement avec fgets.
ligne[z] = "\n";
"\n" est une chaîne de caractère et non un caractère simple. Il y a donc incompatibilité.
D'autant plus que si ton fichier contient plus de 255 caractères, ton algorithme ne fonctionnera pas.
Ce que tu peux faire tout simplement, c'est de lire caractère par caractère ton fichier. Ainsi pas besoin de gérer l'allocation dynamique, pas besoin d'utiliser de la mémoire pour rien, pas besoin d'utiliser strtok, etc.
Si tu veux un exemple, n'hésite pas ;-))).
Cdlt,
while(ligne[z] != NULL)
ligne[z] n'est pas un tableau mais un char. Autrement dit ligne est un tableau de char. Tu compares donc un char avec NULL... D'autant plus tu parcours caractère par caractère après avoir lu la chaine entièrement avec fgets.
ligne[z] = "\n";
"\n" est une chaîne de caractère et non un caractère simple. Il y a donc incompatibilité.
D'autant plus que si ton fichier contient plus de 255 caractères, ton algorithme ne fonctionnera pas.
Ce que tu peux faire tout simplement, c'est de lire caractère par caractère ton fichier. Ainsi pas besoin de gérer l'allocation dynamique, pas besoin d'utiliser de la mémoire pour rien, pas besoin d'utiliser strtok, etc.
Si tu veux un exemple, n'hésite pas ;-))).
Cdlt,
Voici ma dernière version :
et ça marche niquel ! Juste qu'il affiche pas bien la dernière ligne alors je la laisse tomber !
Mais je suis quand même preneur pour l'exemple ;) merci !
FILE *fle; int n = 0; char ligne[256]; char total[256]; fle = fopen("./starts.lst", "r"); if(fle == NULL) { printf("E : Can't open \"starts.lst\"\n"); return 1; } printf("I : Reading \"starts.lst\"\n"); int x = 0; while(fgets(ligne, 256, fle) != NULL) { printf("I : Readed : %s\n", ligne); int z=0; while(ligne[z] != NULL) { total[x] = ligne[z]; x++; z++; } n++; } printf("I : %d lines sucessfull readed !\n", n); fclose(fle); char *lignes[n-1]; int o = 1; lignes[0] = strtok(total, "\n"); while(o != n) { lignes[o] = strtok(NULL, "\n"); o++; } char *colonne[n-1]; char *colonne2[n-1]; char *colonne3[n-1]; char *colonne4[n-1]; char *colonne5[n-1]; char *colonne6[n-1]; char *colonne7[n-1]; char *colonne8[n-1]; int d = 0; while(d < n-1) { colonne[d] = strtok(lignes[d], ";"); colonne2[d] = strtok(NULL, ";"); colonne3[d] = strtok(NULL, ";"); colonne4[d] = strtok(NULL, ";"); colonne5[d] = strtok(NULL, ";"); colonne6[d] = strtok(NULL, ";"); colonne7[d] = strtok(NULL, ";"); colonne8[d] = strtok(NULL, ";"); d++; }
et ça marche niquel ! Juste qu'il affiche pas bien la dernière ligne alors je la laisse tomber !
Mais je suis quand même preneur pour l'exemple ;) merci !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question