Déplacement dans un fichier seekg tellg
Bonjour,
Dans l´objectif de convertir un fichier de mash dans un autre format. Un certain nombre de lignes d´un format particulié sont inutile à la création de l´autre format. mon idée est de lire toutes ces lignes en testant le format de la ligne, à la première différence je m´arrête et me replace au début de la ligne pour la relire ne enregistrant les infos.
Puisqu´un bout de code vaut mieux qu´un long discours voici mon code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
string dat_file;
int Up1;
ifstream f_dat(dat_file.c_str());
if (!f_dat)
{
cout << "Erreur d ouverture f_dat" << endl;
};
while (test == 102) // Les lignes à ignorer ont 102 comme deuxième valeur
{
Up1 = f_dat.tellg();
cout << f_dat.tellg() << endl;
f_dat >> temp >> test >> temp >> temp;
cout << test << "\t" << temp << endl;
};
f_dat.seekg(Up1);
cout << f_dat.tellg() << endl; //ici je récupère bien Up1
f_dat >> temp >> test >> temp >> temp; // Ici rien à voir je suis trois ligne plus loin et pas sur la première ligne sans erreur
cout << test << "\t" << temp << endl; |
Je suis un peu nouveau avec c++, j´ai lu l´aide relative à tellg et seekg : http://www.cplusplus.com/reference/i...eam/seekg.html
Je dois me planter sur un concept fondamental...
Voici si cela peut aider le bout de mon fichier à lire qui pose problème :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
49 102 47 48
46 102 1 45
52 102 49 50
20 102 24 4
8 102 14 15
58 102 54 55
4 102 11 12
35 102 36 7
18 102 22 23
12 102 17 18
24 102 27 28
21 102 6 25
238 203 45 102 1
181 203 84 54 55
104 203 67 74 73
86 203 61 11 12
210 203 42 95 94
154 203 78 25 26
239 203 99 15 97
182 203 83 87 84
105 203 68 72 74 |
Mon objectif est d´ignorer les lignes qui ont pour deuxième valeur 102, et ensuite de lire celle avec 203.
J´utilise VC2005
Merci du coup de main
Renan
Encore une petite question
Salut !
Merci pour ta réponse je n´y croyais plus :), peut être que le titre fait un peu peur.
J´ai donc développer une autre méthode quii ressemble un peu à la tienne (avec un case et non un if car le numéro correspond au format d´un élément de 1d, 2d à 2, 3, 4 points). Bref cela fonctionne maintenant très bien. Je me compliquait en effet un peu le machin. :roll:
J´ai encore deux questions (je débute en c++, étant plus habitué au fortran, suis un matheux:mrgreen: ) :
- Comment fonctionne réellement l´alliance des fonctions seekg et tellg. Je promets de toujours chercher une autre possibilité que d´utiliser ces fonctions. C´est plutôt par curiosité.
- Quel est l´intérêt d´utiliser une structure à la place de 4 variables indépendantes ?
Merci du coup de main
Renan