Récupérer les données d'un fichier .txt en C++

[Résolu]
Signaler
-
 Safa -
Bonjour,
Je suis débutante en C++, j'ai un fichier qui contient des entiers et j'ai besoin de lire le fichier puis sauvegarder ces entiers dans un tableau
Je ne sais pas comment faire ça; pouvez vous m'aider svp !!

2 réponses

Messages postés
329
Date d'inscription
samedi 18 décembre 2004
Statut
Membre
Dernière intervention
26 juillet 2021
2
Bonjour Safa,
Il y a plusieurs méthodes pour lire en C++ un fichier. Cela dépend aussi du fichier à lire et de l'utilisation des données lues. Voici donc un exemple dans lequel on lit un fichier de type texte où chaque ligne comprend le nom d'un élève, sa note en français et sa note en math, exemple :
Ernest 12 15
Claude 15 17
Arthur 13 19
Bernard 14 18

Cet exemple comporte volontairement une petite difficulté. En lisant une ligne dans une variable de type std::string on obtient toute la ligne. Ensuite quand on veut obtenir le nom de l'élève dans la variable nom prévue pour cela et de type std::string il faut identifier et utiliser la position du caractère <espace> qui sert de séparateur. C'est ce qui est fait. Pour utiliser les données lues on range dans trois vecteurs la liste des noms, la liste des notes en français et la liste des notes en math. Et pour finir on affiche le nom du meilleur élève en math.
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <vector>

int main(){
    std::ifstream filein("fichier.txt");
    int nb = 0;
    std::vector<std::string> listeNoms;
    std::vector<int> listeFran, listeMath;
    std::string ligne;
    while(std::getline(filein, ligne)) {
        size_t posit = ligne.find(" ");
        std::string nom = ligne.substr(0, posit);
        int nfran, nmath;
        std::stringstream ss;
        ss << ligne.substr(posit);
        ss >> nfran >> nmath;
        std::cout << nom << "  " << nfran << "  " << nmath << std::endl;
        listeNoms.push_back(nom);
        listeFran.push_back(nfran);
        listeMath.push_back(nmath);
        ++nb;
    }
    int prem, maxi = 0;
    for(int i=0; i<nb; i++) 
        if(listeMath[i] > maxi) {
            prem = i;
            maxi = listeMath[i];
        }
    std::cout << "Le meilleur en math est : " << listeNoms[prem] << std::endl;
    getchar();
    return 0;
}

Chacun peut adapter cet exemple à son utilisation personnelle.
pgl10 Je vous remercie infiniment sur votre réponse, ça m'a beaucoup aidé :)