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 :

AIDE sur Tableaux multidimensionnels


Sujet :

C

  1. #1
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 98
    Points : 65
    Points
    65
    Par défaut AIDE sur Tableaux multidimensionnels
    Bonjour je souhaiterai utilisé un tableau a plusieurs dimensions, dont je ne connaitrai ni le nb de ligne ni le nb de colonne.
    Je dois lire un fichier .csv et au fur et a mesure enregistrer des données.
    C'est la 1ere fois que j'utilise un tableau comme ca.

    Voila comment je l'ai déclaré :
    ensuite je copie dans une variable ma chaine :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strcpy(temp, ligne_lu);
    puis j'essai de copier cette variable dans mon tableau multidimensionnel j'ai essayé plusieurs choses dont :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tab[num_ligne][num_colonne] = malloc(10*sizeof(temp));
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strcpy(tab[num_ligne][num_colonne], temp);
    voila l'erreur que ca me met : [Warning] assignment makes integer from pointer without a cast

    Tou ca dans des boucles bien sur, et je sais qu'il doit y avoir des horreurs mais c'est pour ca que je viens la.

    merci du coup de main

  2. #2
    Membre confirmé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2006
    Messages
    572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 572
    Points : 631
    Points
    631
    Par défaut
    Comme tu dis, des horreurs !

    Deja dans un premier temps il va falloir préciser ce que tu veux réellement !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     char tab[250][250];
    ça c'est un tableau de 250 lignes contenant chacune une chaine de 250 char.

    Donc en gros tu considère que ton fichier fait au plus 250 lignes, et qu'aucune de ces lignes ne fait plus de 249 caractères (0 final !).
    Il ne faut pas oublier qu'une chaine de caractères est deja un vecteur, donc la premiere dimension.

    Si tu veux un tableau a deux dimensions de chaines, ça te fait 3 dimensions en tout.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     char tab[250][25][1024];
    la ça te donne 250 lignes de 25 cases chacunes et chaque case est une chaine de 1023 caractères (0 final toujours)

    Mais avec un truc comme ça, tout risque de sauter, donc l'idéal est de faire qqch de dynamique.

    Le moyen le plus évident (pas forcément le meilleur) est de lire une premiere fois le fichier, ligne par ligne, pour les compter, et connaitre le nombre de colonne max, et ensuite de faire les mallocs correspondants.

    ça donnerait ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    char ***matrice = NULL; // toujours initialiser les pointeurs a null
     
    matrice = malloc (nb_lignes * sizeof (char **)); // sizeof (char **) == sizeof (char *) mais comme ça c'est un peu plus clair
     
    // on alloue chaque ligne séparément.
    for (i = 0; i < nb_lignes; ++i)
         matrice[i] = malloc (nb_col * sizeof (char *));
    Donc ensuite (toujours une méthode parmis d autre, a toi d eventuellement optimiser), tu lis ligne par ligne, tu fais une fonction de découpage par rapport à la virgule, et tu fais un strdup de chaque bout de ta ligne dans la case correspondante au tableau.

    Notes importantes :
    -quand tu alloues bcp de choses comme ça, vérifie que c'est bien alloué à l'aide d'un test.
    -strdup alloue la chaine, donc pas besoin d'un nouveau malloc, alors que strcpy considere que tu a deja alloué
    -tab[num_ligne][num_colonne] = malloc(10*sizeof(temp)); c'est peut etre le truc le plus idiot que t as pu pondre, pas mal :p
    - n'oublie pas de tout libérer dans l'ordre et proprement.


    jpense avoir fait le tour
    Venez partager vos expériences au sein d'un projet sur slicesofit, agile & amélioration continue

  3. #3
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par orj30754
    Bonjour je souhaiterai utilisé un tableau a plusieurs dimensions, dont je ne connaitrai ni le nb de ligne ni le nb de colonne.
    Je dois lire un fichier .csv et au fur et a mesure enregistrer des données.
    Ceci est en gros la spécification de ton problème. Avant de se ruer sur le code et d'écrire un peu au hasard, il faut se poser et réfléchir.

    1 - La spécification est-elle complète ?

    Je comprends qu'il existe quelque part un fichier texte contenant des données au format CSV.

    Tu dois charger les données en mémoire sous la forme d'un tableau.

    Je lis aussi "un tableau a plusieurs dimensions, dont je ne connaitrai ni le nb de ligne ni le nb de colonne"

    Pour le nombre de ligne, OK, c'est le nombre de lignes du fichier (enfin, je suppose, mais en CSV, c'est comme ça en général).
    Pour le nombre de colonnes, c'est différent. Si j'ai bien compris, chaque ligne peut comporter un nombre différent et indéterminé de champs textes séparés par une virgule (ou tout autre séparateur).

    Comme pour le moment, on a pas d'indication sur la nature des champs, on va considérer dans un premer temps que ces champs sont des textes bruts non interprétés.

    2 - La conception et surtout le traitement de ce genre de structure de données complexe n'est pas trivial.

    On peut imaginer plusieurs solutions.

    • Les tableaux fixes alloués
    • Les tableaux flexibles
    • Les listes chainées.

    ou une combinaison de ces méthodes...

    Quel est l'ordre de grandeur de la taille du fichier à traiter (nombre de lignes, nombre de champs par ligne, taille des champs).
    Pas de Wi-Fi à la maison : CPL

  4. #4
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 98
    Points : 65
    Points
    65
    Par défaut
    Non je dois pas lire la totalité du fichier. Je m'arrete à un certain moment.
    On pourra pas avoir plus de 20 lignes 20 colonnes a peu pres.
    Dans les champs j'ai du texte et des float.

  5. #5
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par orj30754
    Non je dois pas lire la totalité du fichier. Je m'arrete à un certain moment.
    On pourra pas avoir plus de 20 lignes 20 colonnes a peu pres.
    Dans les champs j'ai du texte et des float.
    OK. Les champs des lignes sont réguliers ? (type, nombre, ordre?)
    Pas de Wi-Fi à la maison : CPL

Discussions similaires

  1. [XL-2007] Aide sur tableaux dynamiques
    Par bernidupont dans le forum Excel
    Réponses: 2
    Dernier message: 26/05/2015, 18h18
  2. Réponses: 17
    Dernier message: 10/05/2011, 09h48
  3. [XL-2010] Besoins d'aide sur fonctions et tableaux
    Par Vishnou dans le forum Excel
    Réponses: 2
    Dernier message: 25/08/2010, 15h23
  4. Réponses: 4
    Dernier message: 31/08/2006, 16h31
  5. VBA Word - Aide sur les "Retours" dans tableaux
    Par wouebmaster dans le forum VBA Word
    Réponses: 5
    Dernier message: 29/12/2005, 10h08

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