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 :

Lire un CSV et récupérer des nombres


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 129
    Points : 57
    Points
    57
    Par défaut Lire un CSV et récupérer des nombres
    Bonjour,

    J'essaye de lire un fichier CSV et récupérer les valeurs puis en faire un tableau. Mais je pense avoir un problème de typage car lors de la lecture et au premier affichage j'ai bien récupéré mes valeurs. Je les insère ensuite dans un tableau, puis j'affiche mon tableau. Et là c'est la catastrophe...

    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
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
     
    #include <stdio.h>
    #include <stdlib.h>
    #define TAILLE_MAX 100 
     
     
     
    int main(int argc, char *argv[])
    {
        FILE* HPL_fichier = NULL;
        FILE* CAS_fichier = NULL;
        char buffer_lecture1[TAILLE_MAX] = "";
        char buffer_lecture2[TAILLE_MAX] = "";
        int n = 1;
        int m = 1;
        int i = 0;
        const char s[2] = ";";
        char *token1;
        char *token2;
        int hauteurs[20];
        int largeurs[20];
        int tailles[400][2];
     
     
        HPL_fichier = fopen("HPL.csv", "r");
        CAS_fichier = fopen("CASIERS.csv", "r");
     
         if (HPL_fichier != NULL && CAS_fichier != NULL)
        {
     
           //définition des casiers envisagés-----------------
            fgets(buffer_lecture1, TAILLE_MAX, CAS_fichier);//on prend une ligne du CSV
     
     
            token1 = strtok(buffer_lecture1, s);//on la découpe selon les ;
     
     
    		while( token1 != NULL ) 
    			   {
    			      n++;
    			      printf( " %s\n", token1 );//ici affichage impeccable
    			      hauteurs[n] = (int) token1;
    			      token1 = strtok(NULL, s);
    			   }
    			   hauteurs[0] = n;
    		n = 1;	   
     
     
     
            fgets(buffer_lecture1, TAILLE_MAX, CAS_fichier);//on prend une ligne du CSV
     
     
            token1 = strtok(buffer_lecture1, s);//on la découpe selon les ;
     
     
    		while( token1 != NULL ) 
    			   {
    			      n++;
    			      printf( " %s\n", token1 );//ici affichage impeccable
    			      largeurs[n] = (int) token1;
    			      token1 = strtok(NULL, s);
    			   }
    			   largeurs[0] = n;
    		n = 1;	   
     
     
     
     
    		//création tableau --------------------------------------------------
     
    		for(n = 1 ; n < hauteurs[0] ; n++) {
    			for(m = 1 ; m < largeurs[0] ; m++) {
     
    				tailles[1][i] = hauteurs[n];
    				tailles[2][i] = largeurs[m];
     
    				printf("\nlargeur = %d | hauteur = %d\n", tailles[1][i], tailles[2][i] );//ici affichage qui ne veut plus rien dire...
    				i++;
    			}
    		}
     
     
     
     
     
     
     
     
        }
        else
        {
            printf("Il manque un fichier en entrée");
        }
     
            fclose(HPL_fichier);
            fclose(CAS_fichier);
     
        return 0;
    }

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 129
    Points : 57
    Points
    57
    Par défaut
    La fonction atoi()... =)

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par lmplmp Voir le message
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    printf( " %s\n", token1 );//ici affichage impeccable
    hauteurs[n] = (int) token1;
    Bonjour

    Cette instruction ne fait pas ce que tu crois. Elle fonctionne en Python mais pas en C (trop bas niveau).
    "token1[]" étant un tableau, "token1" contient l'adresse de ce tableau. Et donc caster "token1" en (int) te donnera cette adresse vue comme un entier. Et non (comme je pense que c'est ce que tu aimerais) le contenu de "token1" converti en entier.

    Accessoirement je te conseillerais de ne pas trop t'attacher à strtok() car elle n'est pas réentrante. En effet, elle utilise un buffer statique pour mémoriser son travail en cours ce qui t'interdit de l'utiliser par exemple en imbrication (ex pour un truc de type PATH /x/y/z;/a/b/c;/e/f/g => nécessiterait une première boucle d'extraction sur les ";" puis une seconde imbriquée sur les "/" ce qui n'est pas possible). Essaye d'utiliser plutôt strtok_r()...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 05/06/2013, 22h57
  2. [PowerShell] Lire à fichier CSV et effacer des lignes
    Par danje dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 07/02/2013, 11h44
  3. Réponses: 10
    Dernier message: 23/04/2007, 14h18
  4. lire fichier csv et en extraire des infos
    Par isaglada dans le forum VBScript
    Réponses: 2
    Dernier message: 12/02/2007, 13h04
  5. Récupérer des données fichiers *.csv
    Par Fred2209 dans le forum Visual C++
    Réponses: 11
    Dernier message: 08/01/2007, 15h16

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