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

Résolu
Safa - 22 juil. 2021 à 17:53
 Safa - 25 juil. 2021 à 11:24
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 !!
A voir également:

2 réponses

pgl10 Messages postés 380 Date d'inscription samedi 18 décembre 2004 Statut Membre Dernière intervention 29 octobre 2023 11
23 juil. 2021 à 18:07
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.
1
pgl10 Je vous remercie infiniment sur votre réponse, ça m'a beaucoup aidé :)
0
Rejoignez-nous