Lire contenu de plusieurs fichiers en même temps

Résolu/Fermé
parabole1 Messages postés 3 Date d'inscription jeudi 26 novembre 2015 Statut Membre Dernière intervention 7 janvier 2016 - Modifié par parabole1 le 26/11/2015 à 12:53
mamiemando Messages postés 33077 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 18 avril 2024 - 1 déc. 2015 à 19:22
je suis en train d' essayer d' ecrire un Programme qui demande à l' utilisateur de donner le nombre des fichiers à ouvrir (1 à 4), les noms des fichiers (6 caratères)ensuite le Programme les ouvre et lit le contenu de chaque fichier et affiche tous les contenus en même temps.

voici ma première fonction qui marche très bien.

 

void entrer_nom(const int& m, int& nb_1, char in_name[4][7])
{
m = 4;
cout << "Nb =";
cin >> nb_1;

if (nb_1 <= m)
{
for (int j = 1; j <= nb_1; j++)
{
cout << j << ".Cmd_Name =";
cin >> &in_name[j][7];

}

}

}


et là la fonction à problème

   
void lire_contenu(ifstream&, char file_Name[4][7], char name_1[7], int& n_1, double& sd_1)
{

ifstream inf;

//cout << "Enter the file name to be opened: ";
//cin >> file_Name;

inf.open(file_Name, ios::in);

if (inf.fail())
{
exit(1);
}


else
{

cout << "Cmd_Name:" << file_Name << endl;

inf >> name_1 >> set_id1;

inf.ignore(numeric_limits<streamsize>::max(), '\n');

inf >> n_1 >> sd_1;


}

inf.close();

cout << "NAME:" << name_1 << endl;
cout << "SET_ID:" << set_id1 << endl;
cout << "N =" << n_1 << endl;
cout << "SubD =" << sd_1 << endl;


return;
}




merci d' avance pour tous vos aides
A voir également:

1 réponse

mamiemando Messages postés 33077 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 18 avril 2024 7 748
Modifié par mamiemando le 1/12/2015 à 19:20
Ça me paraît un peu compliqué. Je ferais d'abord une boucle qui demande les noms de fichiers, puis ensuite qui les affiche. Je n'ai pas compris ce qu'était set_id.

Par ailleurs je ne sais pas trop ce que tu entends par afficher le contenu en même temps (car j'imagine que tu vas en pratique les afficher les uns après les autres) ?

#include <fstream>
#include <iostream>
#include <list>
#include <ostream>
#include <string>

std::string prompt_filename(std::size_t i, std::size_t n) {
    std::string filename;
    do {
        std::cout << "Filename (" << i << '/' << n
            << ") (6 chars max)? ";
        std::cin >> filename;
    } while (filename.size() > 6 || filename.size() == 0);
    return filename;
}         
          
bool print_file(std::ostream & os, const std::string & filename) {
    bool ret = false;
    std::ifstream ifs(filename);
    if (ifs) {
        std::string line;
        while (std::getline(ifs, line)) {
            os << line << std::endl;
        }
        ifs.close();
        ret = true;
    }   
    return ret;
}                    
                     
int main() {
    std::size_t num_files;
    std::list<std::string> filenames;

    do {
        std::cout << "Number of files [1-4]?";
        std::cin >> num_files;
    } while(num_files == 0 || num_files > 4); 

    for (std::size_t i = 0; i < num_files; ++i) {
        filenames.push_back(prompt_filename(i, num_files));
    }                      
                           
    for (const std::string & filename : filenames) {
        bool success = print_file(std::cout, filename);
        if (!success) {
            std::cerr << "Can't print [" << filename
                << ']' << std::endl;
        }   
    }   
    
    return 0;
}


Compilation :

g++ -std=c++11 -W -Wall toto.cpp -o toto


Exécution :

./toto



Bonne chance
0
parabole1 Messages postés 3 Date d'inscription jeudi 26 novembre 2015 Statut Membre Dernière intervention 7 janvier 2016
1 déc. 2015 à 07:47
je n' ai pas été précis dans la formulation de ma question, je m' en excuse. En fait set_id1 est un string à 17 charatères ( char set_id[17]) que j' ai oublier de declarer dans ma fonction lire_contenu(). En plus en ecrivant "lit le contenu de chaque fichier" je pensais à la lecture des varaiables bien précises dans le contenu du fichier ( inf >> name_1 >> set_id1) et un int et un double ( inf >> n_1 >> sd_1). Je viens de tester ton programme, il marche très bien sauf que tu as omis (size_t i) sur la ligne 7 et les parenthèses (filename.size() == 0) sur la ligne 13. merci pour ton aide
0
mamiemando Messages postés 33077 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 18 avril 2024 7 748
1 déc. 2015 à 19:22
Oui merci pour tes corrections (répercutées dans mon premier message).

En fait j'ai ajouté ça après coup pour coller à ton énoncé mais comme tu l'as compris le programme marcherait sans ces tests pour des strings de longueurs à priori quelconques et je n'ai pas testé derrière.

Pour être homogène avec prompt_filename, on aurait également pu créer prompt_num_files.

Bonne continuation !
0