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 :

Fichier dans un tableau


Sujet :

C++

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 27
    Par défaut Fichier dans un tableau
    Bonjour,
    Je ne comprend pas pourquoi mon code ne marche pas ( aucune erreur ne s'affiche ). J'essaie de faire passer un fichier dans un tableau ( en utilisant ^ comme caractère pour changer de ligne ).
    Une petite aide ? Enfaite, le problème vient du faire que le tableau ne prend pas la valeur de mon caractère mais je sais pas pourquoi.

    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
        // Lecture map
         int TableauCarte[100][100];
        ifstream fichier("map2.txt", ios::in);
        string ligne,s,ligne2;
        int p=0,k=0,i=0;
     
        if(fichier)
        {
            while (!fichier.eof())
            {
     
                getline(fichier,ligne);
     
                for(int i=0;i<ligne.length();i++)
                {
     
     
                    if(ligne[i]=='^')  // ^ caractère de retour a la ligne
                    {
                        p++;
                        k=-1;
                    }
                    else
                    {
                        TableauCarte[k][p] == ligne[i];
     
                        cout <<ligne[i];
                    }
     
                    k++;
                }
     
            }
        }
        else
        {
            cout << "Pas moyen de charger la map";
        }
        fichier.close();
    Merci d'avance de votre aide.

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 446
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 446
    Par défaut
    Tout ceci me semble bien trop compliqué.
    Utilisez le débuggeur.

  3. #3
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    750
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 750
    Par défaut
    Juste une question, si '^' est utilisé pour séparer les lignes, pourquoi ne pas faire std::getline(fichier, ligne, '^') ?

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Par défaut
    Citation Envoyé par Spiritus44 Voir le message
    Une petite aide ? Enfaite, le problème vient du faire que le tableau ne prend pas la valeur de mon caractère mais je sais pas pourquoi.
    bonjour,
    Peux tu préciser ce que tu entends par là, exactement? Pour mieux comprendre, il me faudrait un exemple de contenu du fichier map, et des valeurs que tu attends, et celles que tu obtiens.
    Je pressens un problème de conversion mal maîtrisée...

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 27
    Par défaut
    bacelar, jo_link_noir et therwald merci de m'avoir répondu,
    bacelar -> le debuggeur ne me retourne aucun message d'erreur, cela compile bien. Peut-être que je l'utilise mal, mais au quel cas cela ne compilerais pas ?

    therwald ->

    Exemple de fichier map.txt : 1111^2222
    le ^ doit me servir a faire un retour a la ligne du tableau, c'est à dire que :
    tableau[0-1-2-3][0]= 1

    Et
    tableau[0-1-2-3][1]= 2

    Sauf que tout compile mais ne m'affiche rien, a notez que j'utilise ce code dans une classe mais je ne pense pas que le reste est d'influence.

    jo_link_noir -> Je n'avais, pas vu que la fonction getline avait ce paramètre facultatif supplémentaire, malheureusement je ne vois pas trop comment l'utiliser, la doc n'est pas très explicite sur son utilisation. Mais faudrait que j'essaie un jour de faire un test avec.

    Merci a vous 3 de vos réponses, j'éspère que vous puissiez dans l'avenir m'aider encore

    Cordialement Spiritus44,

  6. #6
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    getline récupère dans une string tous les caractères jusqu'au prochain séparateur, ou la fin du flux, éventuellement.

  7. #7
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    750
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 750
    Par défaut
    Un débogueur n'est pas un compilateur. Mais un compilateur bien configuré (comprendre: compiler avec au moins -Wall -Wextra pour gcc) soulève un énorme problème: == n'est pas fait pour assigné une valeur.

    Citation Envoyé par Spiritus44 Voir le message
    Je n'avais, pas vu que la fonction getline avait ce paramètre facultatif supplémentaire, malheureusement je ne vois pas trop comment l'utiliser, la doc n'est pas très explicite sur son utilisation. Mais faudrait que j'essaie un jour de faire un test avec.
    Avec le visage plus sérieux qui soit: se jour est arrivé.
    Tu parles de quelle doc ? [cppreference.com](http://en.cppreference.com/w/cpp/str...string/getline) ?

  8. #8
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 27
    Par défaut
    Bonjour,
    Je parlais de ce site : http://www.cplusplus.com/reference/i...tream/getline/
    N'est pas un site official du langage c++ ?

    Et concernant le '==' je l'avais mis en désespoir de cause en espérant une intervention divine.

    Quand je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TableauCarte[k][p] = ligne[i];
    cout <<ligne[i];
    Il m'affiche bien la valeur de ligne[i] normalement sauf que mon tableau n'en prend pas la valeur. Donc je suis perplexe.

    Cordialement Spiritus

  9. #9
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Par défaut
    Citation Envoyé par Spiritus44 Voir le message

    Exemple de fichier map.txt : 1111^2222
    le ^ doit me servir a faire un retour a la ligne du tableau, c'est à dire que :
    tableau[0-1-2-3][0]= 1

    Et
    tableau[0-1-2-3][1]= 2
    Et peut-on imaginer map.txt: 3241^6871
    donnant:
    tableau[0][0] == 3
    tableau[0][0] == 2
    tableau[0][0] == 4
    tableau[0][0] == 1
    tableau[0][1] == 6
    tableau[0][1] == 8
    tableau[0][1] == 7
    tableau[0][1] == 1

    juste pour être sur d'avoir compris?

    comme le souligne jo_link_noir, == n'est pas un opérateur d'affectation, mais le test d'égalité, donc le contenu du tableau n'est pas mis à jour.
    De plus, affecter directement le caractère à un tableau d'int aura un effet (affecter à la zone la valeur ascii du caractère), mais est-ce ce que tu veux?
    Si tu veux plutôt entrer les valeurs 0-9, tu dois affecter non pas ligne[i], mais ligne[i]-'0'

  10. #10
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 27
    Par défaut
    Oui tu as bien compris ce que je voudrait faire, par contre je pense ne pas avoir compris, en gros tu me dit que ce que j'attribue dans mon tableau c'est le valeur numérique du caractère plutôt que le caractère en lui même ?
    Sinon je ne voit pas quelle serait l'utilité de faire un : ligne[i]-'0'.

    En tout cas merci de prendre le temps de m'aider, ca me fait très plaisir.

    Spiritus,

  11. #11
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    C'est juste que '2' = '0' + 2 = 48+2 = 50.

    Si tu veux que ton tableau contienne des valeurs entre 0 et 9, il faut retirer calculer la distance avec '0', c'est à dire la différence.

Discussions similaires

  1. charger un fichier dans un tableau
    Par nico0007 dans le forum Delphi
    Réponses: 3
    Dernier message: 16/01/2007, 23h59
  2. Réponses: 4
    Dernier message: 26/01/2006, 14h37
  3. Réponses: 14
    Dernier message: 19/11/2005, 18h56
  4. Mettre un fichier dans un tableau
    Par peuf23 dans le forum Langage
    Réponses: 3
    Dernier message: 26/07/2005, 10h47
  5. Réponses: 4
    Dernier message: 10/10/2003, 18h04

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