IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

lecture d'une matrice à partir d'un fichier texte


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 45
    Points : 30
    Points
    30
    Par défaut lecture d'une matrice à partir d'un fichier texte
    Bonjour,


    je voudrais lire une matrice se trouvant dans un fichier texte et stocker les valeurs dans un tableau à deux dimensions

    voici le fichier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    45 319 16.875 -100.375 0
    46 319 17.250 -100.375 615
    47 319 17.625 -100.375 1758
    48 319 18.000 -100.375 1180
    49 319 18.375 -100.375 835
    50 319 18.750 -100.375 1018
    51 319 19.125 -100.375 1420
    52 319 19.500 -100.375 2494
    53 319 19.875 -100.375 2347
    54 319 20.250 -100.375 2310
    55 319 20.625 -100.375 2146
    56 319 21.000 -100.375 2120
    45 320 16.875 -100.000 255
    46 320 17.250 -100.000 834
    47 320 17.625 -100.000 1757
    48 320 18.000 -100.000 1048
    49 320 18.375 -100.000 1182
    50 320 18.750 -100.000 1571
    51 320 19.125 -100.000 2315
    52 320 19.500 -100.000 2495
    53 320 19.875 -100.000 2520
    54 320 20.250 -100.000 2401
    55 320 20.625 -100.000 2020
    56 320 21.000 -100.000 2193
    45 321 16.875 -99.625 271
    46 321 17.250 -99.625 1009
    47 321 17.625 -99.625 1143
    48 321 18.000 -99.625 1063
    49 321 18.375 -99.625 1763
    50 321 18.750 -99.625 2006
    51 321 19.125 -99.625 2888
    52 321 19.500 -99.625 2681
    53 321 19.875 -99.625 2620
    54 321 20.250 -99.625 2599
    55 321 20.625 -99.625 2376
    56 321 21.000 -99.625 1410
    45 322 16.875 -99.250 347
    46 322 17.250 -99.250 1126
    47 322 17.625 -99.250 1365
    48 322 18.000 -99.250 1085
    49 322 18.375 -99.250 1104
    50 322 18.750 -99.250 1637
    51 322 19.125 -99.250 2976
    52 322 19.500 -99.250 2473
    53 322 19.875 -99.250 2438
    54 322 20.250 -99.250 2213
    55 322 20.625 -99.250 2213
    56 322 21.000 -99.250 1816
    45 323 16.875 -98.875 616
    46 323 17.250 -98.875 1343
    47 323 17.625 -98.875 1660
    48 323 18.000 -98.875 1266
    49 323 18.375 -98.875 1161
    50 323 18.750 -98.875 1582
    51 323 19.125 -98.875 2482
    52 323 19.500 -98.875 2583
    53 323 19.875 -98.875 2438
    54 323 20.250 -98.875 2079
    55 323 20.625 -98.875 1818
    56 323 21.000 -98.875 1244
    45 324 16.875 -98.500 555
    46 324 17.250 -98.500 1885
    47 324 17.625 -98.500 1780
    48 324 18.000 -98.500 1364
    49 324 18.375 -98.500 1259
    50 324 18.750 -98.500 1629
    51 324 19.125 -98.500 2420
    52 324 19.500 -98.500 2714
    53 324 19.875 -98.500 2633
    54 324 20.250 -98.500 2198
    55 324 20.625 -98.500 1589
    56 324 21.000 -98.500 985
    45 325 16.875 -98.125 1326
    46 325 17.250 -98.125 1975
    47 325 17.625 -98.125 1708
    48 325 18.000 -98.125 1531
    49 325 18.375 -98.125 1459
    50 325 18.750 -98.125 1762
    51 325 19.125 -98.125 2139
    52 325 19.500 -98.125 2642
    53 325 19.875 -98.125 2471
    54 325 20.250 -98.125 1623
    55 325 20.625 -98.125 549
    56 325 21.000 -98.125 236

    ça fait 84 lignes et 5 colonnes

    voici mon code en C pour effectuer cette opération

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    #include <stdio.h>
    #include <math.h>
    #include <stdlib.h>
    #include <string.h>
     
    float output[83][4];
    FILE *ReadInput;
    int x,y ;
     
    int main (void)
     
    {
     
     
    ReadInput = fopen ("point-narr-H-narr_84pts.txt", "r" ) ;
     
    if(ReadInput == NULL)
    {
    printf("Le fichier n'existe pas");
    }
     
    else
    {
     
    for (y=0;y<=83;y++)
    {
    for (x=0;x<=4;x++)
    {
    fscanf(ReadInput,"%f ",&output[x][y]);
    }
    }
     
    printf("%f",output[5][0]);
     
    fclose (ReadInput) ;
    }
     
     
    return 1 ;
     
    }
    le problème c'est que ça marche pour quelques éléments de la matrice et ça marche pas pour d'autres éléments ( il me donne une fausse valeur )
    je ne sais pas pourquoi ça marche pas , alors est que kk41 peut le ressayer sur son ordi et me trouver la faute...
    merci

  2. #2
    Membre expérimenté
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 729
    Points
    1 729
    Par défaut
    Salut,

    fscanf lit ligne par ligne, donc tu ne devrais pas faire un fscanf pour chaque colonne d'une ligne, à la place fais un fscanf pour toutes les colonnes de la ligne

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 45
    Points : 30
    Points
    30
    Par défaut
    merci pour la réponse, cependant chui pas un pro dans la programmation , alors qu'elle est l'équivalent de ce que vous venez de dire en code C
    merci de me donner la boucle for juste

  4. #4
    Membre averti Avatar de cmoibal
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    361
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Avril 2007
    Messages : 361
    Points : 414
    Points
    414
    Par défaut
    output[x][y] => ouput[y][x]

    la solution est de lire toute la ligne, avec scfanf

  5. #5
    Membre éclairé
    Avatar de buggen25
    Ingénieur développement logiciels
    Inscrit en
    Août 2008
    Messages
    554
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Août 2008
    Messages : 554
    Points : 709
    Points
    709
    Par défaut
    Salut;
    Normalement ça devrait marcher avec cette methode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fscanf (ReadInput, "%f %f %f %f %f\n",output[i][0],output[i][1],output[i][2],output[i][3],output[i][4]);

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 45
    Points : 30
    Points
    30
    Par défaut
    merci bcp les gars

    j'ai un autre souci , je veux faire de ce script une fonction , genre on lui donne un tableau en parametre et un string representant le nom du fichier et cette fonction rempli le tableau output à partir du fichier
    donc logiquement ma fonction va ressembler à kk chose comme ça

    void lire_matrice (float output[84][5], string s )
    {
    traitements ....

    }


    cependant je veux savoir comment je peux l'utiliser dans un programme principal ??? comment je fais l'appel et cette fonction est ce que je dois la mettre dans le même script que le programme principal ou bien je peux la mettre dans un fichier à part.

    merci

  7. #7
    Membre éclairé
    Avatar de buggen25
    Ingénieur développement logiciels
    Inscrit en
    Août 2008
    Messages
    554
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Août 2008
    Messages : 554
    Points : 709
    Points
    709
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    #include <stdio.h>
    #include <math.h>
    #include <stdlib.h>
    #include <string.h>
     
     
    void lire_matrice (float output[84][5], string s )
    {
    traitements ....
     
    }
    float output[83][4];
    FILE *ReadInput;
    int x,y ;
    int main (void)
    {
    // un appel ici.
    lire_matrice(output,"mon_fichier.txt");
     
    return 0;
     
    }

  8. #8
    Membre averti Avatar de cmoibal
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    361
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Avril 2007
    Messages : 361
    Points : 414
    Points
    414
    Par défaut
    Bon, c'est simple, utilisez juste les arument passe a votre binaire ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    int main(int argc, char *argv[])
    {
    if(argc < 1)
    {
    printf("Erreur -- aucun argument");
    return 1;
    }
     
    if(!fichier_existe(argv[1])) // verfiez si le fichier existe
    {
    printf("Erreur -- Fichier non trouvee");
    return 2;
    }
     
    lire_matrice(output,argv[1]);
     
    }

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 45
    Points : 30
    Points
    30
    Par défaut
    merci bcp les mecs
    ça marche nickel

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 20/01/2015, 11h41
  2. Réponses: 6
    Dernier message: 08/12/2008, 12h22
  3. créer une matrice à partir d'un fichier
    Par dododawn dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 22/11/2008, 23h02
  4. Réponses: 2
    Dernier message: 16/11/2008, 16h09
  5. [Débutant] Créer une matrice à partir d'un fichier .txt
    Par niepoc dans le forum MATLAB
    Réponses: 6
    Dernier message: 03/05/2008, 22h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo