Lire un fichier .txt dans C

Résolu
heonmap Messages postés 4 Statut Membre -  
heonmap Messages postés 4 Statut Membre -
Bonjour,
J'ai un pb quand je veux importer les donne'es dans 1 fichier data.txt. Ce fichier contient les suites des re'els, par ex:

12 3 88 98 46 4392
23 4324 43243 29 4328 123 432
32 438 123 4382 32 99 123 324 5409

Il contient 270 lignes et les nombres des re'els sur chaque ligne sont diffe'rents.Je voudrais e'crire un petit program en C , pour lire des donne'es dans ce fichier ( et les utilisent apre`s pour faire des calculs ) .Mon ide'e est que je vais sauve-garder les donne'es dans 1 matrice mais j'arrive pas a` le faire.
Qq pourrait m'aider ? Merci d'avance.
Configuration: Linux
Firefox 3.0.11

5 réponses

  1. DarkAurora Messages postés 443 Statut Membre 27
     
    je ne comprend pas bien tout ton code mais bon

    tout d'abord pourquoi ça
    static const char filename[] = "./data.txt";
    fich3 = fopen ( filename, "r" );
    au lieu de ça
    fich3 = fopen ("./data.txt","r+");
    je prend moins de place déjà et je prend le droit d'écrire et de lire sur le fichier, c'est simplement au cas ou
    ensuite tu test l'ouverture c'est bien et je ne vois pas d'erreur par contre pourquoi le restester dans le else
    if(fich3==NULL) {
    printf("Error: can't open file.\n");
    return 1;
    }
    else {
    printf("File opened successfully.\n");
    i = 0 ;
    /****Ici tu ne rentrera jamais dans ce if puisque tu es dans le cas ou la condition est égale à "fich3 est égale à tout sauf NULL*****/
    if(fich3==NULL) {
    printf("Error: can't open file.\n");
    return 1;
    }
    /****donc ici le else ne sert à rien non plus
    else {
    printf("File opened successfully.\n");
    /*** ici tu rouvre un fichier pour sauvegarder, n'étant pas un pro de la gestion de fichier en C je te conseillerais dans un premier temps de créer toi même le fichier save.txt de prendre le chemin relatif puis d'ouvrir ce fichier toujours en r+
    le mode création bug parfois et il est difficile de le debug****/
    FILE*fp=fopen("save.txt","w");

    ensuite le reste est assez confus

    je ne vois pas bien ce que tu fais et je ne comprend plus ce que tu souhaite faire
    je t'aiderais autant que faire se peux
    mais il faut que je sois sûre de ce que tu souhaite
    2
  2. DarkAurora Messages postés 443 Statut Membre 27
     
    la partie fichier en C n'est pas celle que je préfère le codage binaire merde souvent dans l'écriture^^
    mais si tu veux écrire dans un fichier ce n'est pas plus simple que fwrite ( je te laisse rechercher l'utilisation de cette fonction sur internet pour lire il y a fread

    sinon tu peux aussi utiliser fscanf ou fprintf mais pour commencer utilise les deux autres fonctions elles sont plus simples à comprendre et plus facile à utiliser

    si tu rencontre des problèmes pour utiliser ces fonctions je t'aiderais, pour l'instant je te met sur la voie

    c'est en galérant que l'on apprend le mieux
    0
    1. heonmap Messages postés 4 Statut Membre
       
      Bonjour,
      Merci de ta réponse,
      Cependant, je n'arrive pas à le faire. Je suis tout bête...
      Voici mon programme avec fscanf et fprintf :

      #include <stdio.h>
      #include <stdlib.h>
      #include <string.h>
      #include <ctype.h>
      #include <ctype.h>
      #include <time.h>
      #include <sys/types.h>
      int main ( void )
      {
      FILE *fich3;
      int i, j,N=270;
      int numbers[N]; // je définis un tableau pour sauve-garder les valeurs dans les lignes,pour chaque itération. le fichier data.txt a 270 lignes,mais les nombres des éléments sur chaque ligne ne sont pas constants.Je définit un tableau avec la dimension comme ça pour avoir un "largeur" suffisant à sauve-garder les éléments

      static const char filename[] = "./data.txt";
      fich3 = fopen ( filename, "r" );
      if(fich3==NULL) {
      printf("Error: can't open file.\n");
      return 1;
      }
      else {
      printf("File opened successfully.\n");
      i = 0 ;
      if(fich3==NULL) {
      printf("Error: can't open file.\n");
      return 1;
      }
      else {
      printf("File opened successfully.\n");
      FILE*fp=fopen("save.txt","w");

      i = 0 ;
      while(!feof(fich3)) {
      /* loop through and store the numbers into the array */
      for(j=0;j<N;j++)
      { fscanf(fich3, "%d", &numbers[j]);

      // je vais faire les calculs avec les éléments ici.

      }
      fprintf(fp,"%d",numbers[j]); // je teste le programme en imprimant les valeurs dans les lignes chaque fois,malheureusement, ça ne marche pas.
      i++;
      }
      fclose(fp);
      fclose(fich3);
      return 0;
      }
      }

      je ouvre le fichier data.txt ;en suite,je lis le fichier pour récupérer tous éléments.
      Si je fais comme ça, je ne peut pas sortir les résultats comme je veux.
      Tu purrais m'indiquer les fautes s'il te plait..
      0
  3. heonmap Messages postés 4 Statut Membre
     
    comme ton explication est très clair, tu m'as aidé bcp.
    Bref,mon probleme est comme ça.
    j'ai un fichier data.txt qui contient les entières :
    12 555 1233 45 366 655 455 57 42 4246
    11 47 68 998 878 755
    6 84 876 645 84 5
    ...........
    Ce que je veux maintenant,c'est seulement lire ce fichier,ligne par ligne.Pour chaque ligne, je veux récupérer les valeurs des éléments.Par ex:

    for i=0; i< 270 //nombres des lignes
    lire chaque ligne
    lire chaque valeur
    faire les calculs avec chaque valeur dans 1 lignes

    Quand je lis tous avec fscanf, je ne récupère que tous les valeurs dans le fichier ,comme le programme ci-dessous.
    Je veux sortir les valeurs pour chaque ligne, pour que je puisse les appeler facilement (comme dans la matrice,la valeur j ième dans la ligne i est a[i][j] par exemple )

    Tu comprends mon idée?

    int main() {
    FILE *file,*fp;
    int numbers[8000];
    /* make sure it is large enough to hold all the data! */
    int i,j;

    file = fopen("data.txt","r");
    if(file==NULL) {
    printf("Error: can't open file.\n");
    return 1;

    }
    else {
    printf("File opened successfully.\n");

    i = 0 ;
    while(!feof(file)) {
    /* loop through and store the numbers into the array */
    fscanf(file, "%d", &numbers[i]);
    i++;
    }
    for(j=0 ; j<i ; j++)
    { /* now print them out 1 by 1 */
    printf("%d", numbers[j]);
    }
    fclose(file);
    return 0;
    // }
    }
    0
  4. DarkAurora Messages postés 443 Statut Membre 27
     
    si tu arrive à sortir toutes les valeurs c'est déjà très bien par contre mauvaise nouvelles rien ne permet de lire ligne par ligne
    soit avec fscanf tu lis tout le fichier, soit avec fgetc ou fgets tu lis le caractère ou la chaine de caractère
    si tu souhaite récupérer ta ligne je ne vois d'autre solution que d'insérer un caractère spécial dans ton fichier pour signaler la fin de ligne comme \n
    avec un test approprié tu récupérera tout les éléments de ta ligne et tu pourra opérer comme bon te semble

    mais en tout cas les fonctions fscanf fgetc fegts ne détecte pas la fin ni le début d'une ligne, la lecture d'un fichier passe par la tête de lecture on peut passer à la fonction le nombre d'octet à lire mais pas lui dire "je veux que tu me récupère les éléments sur cette ligne"

    en espérant t'avoir aidé
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. heonmap Messages postés 4 Statut Membre
     
    J'ai bien re'solu le pb il y a 2 jours.
    Merci bien DarkAurora.
    0