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 fichier et ranger dans tableau


Sujet :

C++

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    229
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 229
    Points : 87
    Points
    87
    Par défaut Lire un fichier et ranger dans tableau
    Bonsoir,

    je viens vers vous quand j'ai un problème avec mon code. J'aimerai pouvoir lire un fichier et pour chaque \n que je trouve dans ce dernier, je range les résultats par case en fonction d'un \n. Voici un exemple de fichier :

    34
    36
    35
    105
    66
    etc...
    Voici mon code actuel :
    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
     
            ifstream fichier("/home/nemesis/workspace/test/src/test.txt", ios::in);  // on ouvre en lecture
     
            if(fichier)  // si l'ouverture a fonctionné
            {
                    string contenu;  // déclaration d'une chaîne qui contiendra la ligne lue
                    int i = 0;
                    string result[800];
                    while (getline(fichier, contenu)) {
                    	if (contenu == '\n') { // dès que je vois un \n, je change de case de tableau
                    		i++;
                    	}
                    	else {
                    		result[i] = contenu;  // je range la valeur dans mon tableau
                    	}
                    	i++;
                    }
                    fichier.close();
            }
            else
                    cerr << "Impossible d'ouvrir le fichier !" << endl;
     
            return 0;
    au final, voici ce que j'aimerai avoir dans mon tableau :

    [34][36][35] ...
    Pourriez-vous m'aider ?

    Merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    getline mange la fin de ligne. =>
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    std::vector<std::string> v;
    std::string line;
    while (std::getline(f, line)) {
       v.push_back(line);
    }
     
     
    for (size_t i=0,N=v.size() ; i!=N ; ++i) {
        cout << "v["<<i<<"]="<<v[i]<<"\n";
    }
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    229
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 229
    Points : 87
    Points
    87
    Par défaut
    Citation Envoyé par Luc Hermitte Voir le message
    getline mange la fin de ligne. =>
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    std::vector<std::string> v;
    std::string line;
    while (std::getline(f, line)) {
       v.push_back(line);
    }
     
     
    for (size_t i=0,N=v.size() ; i!=N ; ++i) {
        cout << "v["<<i<<"]="<<v[i]<<"\n";
    }
    Ah et il n'y aurait pas une solution plus simple que celle que tu me proposes ? je ne suis pas très doué en c++

    Ce que je veux dire par là, c'est que je ne connais pas les "vector" ni leur utilisation

  4. #4
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    Citation Envoyé par Nemesis007 Voir le message
    Ah et il n'y aurait pas une solution plus simple que celle que tu me proposes ? je ne suis pas très doué en c++

    Ce que je veux dire par là, c'est que je ne connais pas les "vector" ni leur utilisation
    Il n'y a pas plus simple.

    Les vector sont une composantes de la STL (un ensemble de classes standards qu'on est sûr de retrouver partout et qui fournissent des outils des puissants). Le rôle de std::vector c'est d'être un tableau dont la taille varie dynamiquement mais sans que tu ais à la gérer. Pour plus d'info, cf la FAQ, les cours de C++ et google.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,
    La meilleur solution est celle proposée par Luc avec les std::vector. Comme dit David, si tu as du mal, le mieux est d'apprendre à les utiliser. La STL te facilitera grandement la vie dans tes développements et t'aidera surement à faire du code plus robuste.

    Cependant, elle est transposable avec le code que tu avais commencé :
    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
    std::ifstream fichier("/home/nemesis/workspace/test/src/test.txt", std::ios::in);  // on ouvre en lecture
     
    if(fichier)  // si l'ouverture a fonctionné
    {
       const int taille_tableau = 800;
       int i = 0;
       std::string result[taille_tableau];
       while ((i<taille_tableau)&&(std::getline(fichier, result[i]))) {
          ++i;
       }
       fichier.close();
    }
    else
       std::cerr << "Impossible d'ouvrir le fichier !" << std::endl;
     
    return 0;

Discussions similaires

  1. Réponses: 2
    Dernier message: 09/02/2010, 09h10
  2. lire un fichier qui est dans un plugin
    Par *alexandre* dans le forum Eclipse Platform
    Réponses: 1
    Dernier message: 13/02/2008, 10h08
  3. Lire un fichier xml incorporé dans l'exe
    Par chris81 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 05/02/2008, 12h54
  4. Réponses: 2
    Dernier message: 22/09/2006, 08h33
  5. Réponses: 3
    Dernier message: 09/06/2006, 12h36

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