Lire des fichiers en C....

Fermé
duchnoki Messages postés 158 Date d'inscription dimanche 12 octobre 2008 Statut Membre Dernière intervention 30 novembre 2010 - 8 avril 2010 à 17:27
duchnoki Messages postés 158 Date d'inscription dimanche 12 octobre 2008 Statut Membre Dernière intervention 30 novembre 2010 - 12 avril 2010 à 18:30
Bonjour !
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:

5 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
9 avril 2010 à 21:44
Voici le code :

#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 ;-))).
1
duchnoki Messages postés 158 Date d'inscription dimanche 12 octobre 2008 Statut Membre Dernière intervention 30 novembre 2010 4
8 avril 2010 à 19:12
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]);
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
8 avril 2010 à 22:54
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,
0
duchnoki Messages postés 158 Date d'inscription dimanche 12 octobre 2008 Statut Membre Dernière intervention 30 novembre 2010 4
Modifié par duchnoki le 9/04/2010 à 20:56
Voici ma dernière version :
 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 !
0

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

Posez votre question
duchnoki Messages postés 158 Date d'inscription dimanche 12 octobre 2008 Statut Membre Dernière intervention 30 novembre 2010 4
12 avril 2010 à 18:30
Merci !
0