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 :

Convertion de tableau en nombre/ouverture de fichier


Sujet :

C

  1. #1
    Membre éclairé Avatar de seeme
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    430
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 430
    Points : 791
    Points
    791
    Par défaut Convertion de tableau en nombre/ouverture de fichier
    Rebonjour à tous

    Je souhaiterais ouvrir un fichier et récuperer plusieurs information dedans.
    Le fichier se présente comme cela:

    10x10
    0.0|0.0|0.0|0.0|0.0|0.0|0.0|0.0|0.0|0.0|
    0.0|0.0|0.0|0.0|0.0|0.0|0.0|0.0|0.0|0.0|
    0.0|0.0|0.0|0.0|0.0|0.0|0.0|0.0|0.0|0.0|
    0.0|0.0|0.0|0.0|0.0|0.0|0.0|0.0|0.0|0.0|
    0.0|0.0|0.0|0.0|0.0|0.0|0.0|0.0|0.0|0.0|
    0.0|0.0|0.0|0.0|0.0|0.0|0.0|0.0|0.0|0.0|
    0.0|0.0|0.0|0.0|0.0|0.0|0.0|0.0|0.0|0.0|
    0.0|0.0|0.0|0.0|0.0|0.0|0.0|0.0|0.0|0.0|
    0.0|0.0|0.0|0.0|0.0|0.0|0.0|0.0|0.0|0.0|
    0.0|0.0|0.0|0.0|0.0|0.0|0.0|0.0|0.0|0.0|

    la première ligne correspond à la longueur, et le second à la largeure du tableau qui suit.
    Le | est un séparateur entre chacune des données du tableau.

    Mon objectif est de charger la longueur et la largeur en tant qu'entiers pour allouer dynamiquement la mémoire nécessaire au tableau qui suit.

    Le tableau final doit être un tableau de double de dimensions longueur*largeur.

    Pour l'instant, j'en suis là:

    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
     
    void charger_niveau(int niveau)
    {
         FILE* niveau = NULL;
     
     
        fichier = fopen("test.txt", "r");
     
        char chainePremiereLigne[100];
        char longueure[20];
        char largeure[20];
     
     
     
        if (fichier != NULL)
        {
           fgets(chainePremiereLigne, 100, niveau);
           int i=0;
           while (chainePremiereLigne[i]!="x")
           {
                 longueure[i]=chainePremiereLigne[i];
                 i++;
           } 
           fgets (largeure, 20, niveau);
     
     
     
     
     
            fclose(fichier);
    }
    (le code n'a pas été compilé, j'en suis à trouver comment faire).

    Si je ne me suis pas planté, d'abord, j'ouvre le fichier, ensuite je lis la première ligne que je copie caractere par cractere jusqu'à tomber sur "x" dans une chaine.
    Je lis la suite dans une seconde chaine.

    J'ai ainsi récupéré mes paramètres longeur et largeur, mais sous forme de tableau de char :'(

    Comment regrouper ces donnés pour passer de mon tableau à des variables entières et ainsi pouvoir les utiliser? Mon code est-il logique jusque là?

    Merci de m'aider
    @+

  2. #2
    Membre expérimenté
    Avatar de granquet
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 201
    Points : 1 421
    Points
    1 421
    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
    24
    25
    26
    27
    28
    29
     
    char *charger_niveau()
    {
         FILE* niveau;
        unsigned long int x,y;
        char Ligne[100];
        char *tableau = NULL;
        char *ptr_str;
     
        niveau = fopen("test.txt", "r");
     
     if (fichier != NULL)
        {
           if(fgets(Ligne, 100, niveau) != NULL)
           {
                ptr_str = strchr(Ligne,'x');
                if(ptr_str != NULL)
                {
                 x=strtoul(Ligne,NULL,10);
                 y=strtoul(ptr_str+1,NULL,10);
                     if(x && y)
                     {
                     tableau = malloc(x*y);
                     }
                 }
           fclose(fichier);
         }
    return tableau;
    }
    voila comment je ferais. il y'as surement des erreurs, je n'ai pas essayé. mais en cherchant des renseignements sur toutes les fonctions que j'ai utilisé, tu devrais pouvoir t'en sortir.
    ce code extrait (peut etre ...peut etre pas ..., a toi de le verifier et de le comprendre) les valeurs de x et y et alloue un tableau de x*y et retourne l'addresse d'une zone memoire valide si la fonction as reussi, ou NULL en cas d'echec.
    je sais pas si j'ai compris ta question.

  3. #3
    Membre averti Avatar de GyZmoO
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 428
    Points : 301
    Points
    301
    Par défaut
    Yop !

    La solution de Dark_Ebola a l'air cool, si ce n'est que le tableau final doit être un tableau de double et non pas char *

    a+

  4. #4
    Membre expérimenté
    Avatar de granquet
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 201
    Points : 1 421
    Points
    1 421
    Par défaut
    j'ai pensé que comme on avait toujours le meme nombre de valeurs en x et y ...
    on pouvais utiliser un tableau a une seule dimension.
    on remplace: tab[DIM1][DIM2] par tab[DIM1*DIM2]
    pour y acceder: tab[i][j] par tab[i*DIM1 + j] (si mes souvenirs sont bons)

    je rapelle que ce n'est pas exactement ce que tu cherche (j'ai pas tres bien compris ce que tu voulais) tu vas devoir modifier mon bout de code pour l'adapter a tes besoins (c'est un peu fait expres :p)

  5. #5
    Membre averti Avatar de GyZmoO
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 428
    Points : 301
    Points
    301
    Par défaut


    Mea culpa


  6. #6
    Membre éclairé Avatar de seeme
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    430
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 430
    Points : 791
    Points
    791
    Par défaut
    Merci, ce code correspond à ce que je cherchait Je vais pouvoir continuer (en plus j'ai appris des nouvelles fonctions ^^ )

    Pour ce qui est du fait que les nombres soient partout les même, c'est juste pour l'exemple, en fait ces nombres représentent la hauteur de vertez pour générer un genre de heightmap


    merci Bonne soirée

  7. #7
    Membre éclairé
    Avatar de D[r]eadLock
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    504
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 504
    Points : 750
    Points
    750
    Par défaut
    Citation Envoyé par seeme
    (le code n'a pas été compilé, j'en suis à trouver comment faire).
    Le compilateur devrait te donner des messages qui devraient t'éclairer. Par exemple,
    - que niveau est un int (et un parametre de ta fonction) que tu redéfinis en FILE *,
    - que fichier n'est pas défini (hum, ça ne serait pas lui le FILE *)
    ...

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

Discussions similaires

  1. [XL-2007] Utilisation d'un tableau créé a l'ouverture du fichier
    Par Michou199 dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 19/08/2012, 18h59
  2. Réponses: 2
    Dernier message: 21/02/2009, 18h50
  3. Ouverture de fichier en api
    Par Michaël dans le forum Windows
    Réponses: 9
    Dernier message: 10/12/2003, 16h47
  4. Réponses: 2
    Dernier message: 26/02/2003, 15h18
  5. [VBA-E] Evenement ouverture de fichier
    Par gjeff dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 13/12/2002, 09h42

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