bonjour,

je possede une structure avec des membres int.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
struct {
 int rows;
 int cols;
 int maxpixel;
 vector <int> pixels;
 }
j'ai un fichier composé que de nombres entiers, l'un apres l'autre de cette manière:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
P3
3 8 255
255 0 0   255 0 0   255 0 0   
255 0 0   255 0 0   255 0 0   
255 0 0   255 0 0   255 0 0   
255 0 0   255 0 0   255 0 0   
255 0 0   255 0 0   255 0 0   
255 0 0   255 0 0   255 0 0   
255 0 0   255 0 0   255 0 0   
255 0 0   255 0 0   255 0 0
Je voudrais savoir quelle est la procedure a suivre pour lire le fichier et stocker le 3 dans cols, 8 dans rows, et 255 dans maxpixel dans ma structure. sachant que l'ordre des chiffres est toujours le meme, mais les lignes sont parfois changees. Par exemple, le fichier donne en haut peut correspondre a celui la:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
P3 3 8 255 255 0 0 255 0 0 255                                      0 
                                    0 255 0 0 255 0 0 255 0 0 255 0 0
255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0
0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0
On sait des le depart, dans chaque fichier donné, que le deuxième nombre sera celui qui devra stocker dans rows, le troisième dans cols et le quatrième dans maxpixel.

J'ai deja ecris la fonction qui ne fais que lire

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
PPM_Primitive *read_PPM(string fn){
 
    std::vector<std::string> file;
    std::string line;
    file.clear();
    std::ifstream infile (fn.c_str(), std::ios_base::in);
    if (infile.is_open()){
 
       while (getline(infile, line, '\n')){
         file.push_back (line);
         }
       std::cout <<"Read "<< file.size()<<" lines of file "<< fn;
       infile.close();
       }
    else cout << "Couldn't open " << fn << ".\n";
 
}
faut-il utiliser fscanf ? y aurait-il pas une meilleure methode connue sous c++ qui pourrait faciliter la tache ? et comment gérer le retour de lignes ?

des exemples seraient les bienvenus.

Merci