Récupérer data fichier TXT entre 3e et dernière ligne (only)

Signaler
Messages postés
18
Date d'inscription
mardi 10 août 2004
Statut
Membre
Dernière intervention
25 août 2004
-
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
-
Salut !

1ère question :
Je cherche présentement un moyen de débuter la lecture de mon fichier à partir de la 3e ligne et d'arrêter la lecture à l'avant dernière ligne... les 2 premières et la dernière ne sont que du texte et je m'en fous. Est-ce que quelqu'un pourrait m'indiquer comment on fait ??

2ème question :
quel est l'équivalent en C++ de la ligne de commande en C
fgets(szbuffer,MAX_CHAR_PAR_LIGNE,im)?? Selon le code que j'ai programmé (ci-joint), est-ce que je peux le remplacer par im.getline ????

Merci encore de prendre le temps de répondre à ces 2 quesions !

________________________

Voici mon code qui est à modifier pour ne lire que ce qui est entre la 3e et dernière ligne du fichier :

typedef struct _DBL3 { double s[3]; } DBL3;
xyz_S = new DBL3[NBelem];
if (xyz_S == NULL) exit(1);

im.open("image_CUBEtot.vu", ios::in);
while (!im.eof() && i<NBelem)
{
char szbuffer[MAX_CHAR_PAR_LIGNE];
char* valeur;

//... COMMENT ON TRANSFORME CA EN C++ ????
fgets(szbuffer,MAX_CHAR_PAR_LIGNE,im);
valeur = strtok(szbuffer,SEP);

while (valeur != NULL && j<3)
{
xyz_S[i].s[j] = atof(valeur);
valeur = strtok(NULL,SEP);
j++;
}
i++;
}
im.close();

6 réponses

Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
vite fais

std::ifstream im("image_CUBEtot.vu");
std::string line;

while ( std::getline( line, im) && i<NBelem )
{
char szbuffer[MAX_CHAR_PAR_LIGNE];
char* valeur;

//... COMMENT ON TRANSFORME CA EN C++ ????
std::strcpy( szbuffer, line.c_str() );
valeur = strtok(szbuffer,SEP);

while (valeur != NULL && j<3)
{
xyz_S[i].s[j] = atof(valeur);
valeur = strtok(NULL,SEP);
j++;
}
i++;
}

mais fais plutot ca en c++ jusqu'au bout, abandonne char* et utilise std::string
Messages postés
933
Date d'inscription
dimanche 1 avril 2001
Statut
Modérateur
Dernière intervention
9 janvier 2012
2
C'est beau les librairies, ...
Et niveau performence ?
Un petit listing asm pour rigoler.

@+
Arnotic,
Admin CS, MVP Visual C++
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
c'est moins performant mais c'est securisé

et quand je vois un code qui fuis...
Messages postés
933
Date d'inscription
dimanche 1 avril 2001
Statut
Modérateur
Dernière intervention
9 janvier 2012
2
Arf, c'est vrai, javais oublié que sans librairie on ne pouvait que écrire du code ayons besoin d'un plombier...

Chacun vois son code comme il l'entend :-)

@+
Arnotic,
Admin CS, MVP Visual C++
Messages postés
18
Date d'inscription
mardi 10 août 2004
Statut
Membre
Dernière intervention
25 août 2004
1
En réponse à DJL :

d'abord merci pour le bout de code traduit... étant novice, ton aide est plus qu'apprécié!

Il me reste toutefois une question à te poser. Comment est-il possible d'insérer dans ce code une façon de contrôler les lignes que je transcris dans mon tableau ?

Par exemple, si je lis sur la 1ère ligne "Coo =" et sur la 2ème "{", je ne suis pas intéressée à les transcrire dans mon tableau... alors je fais quoi pour que le code saute ces deux lignes ??? (si ça fait partie déjà du code que tu m'as modifié, désolé j'ai pas compris ni où ni comment le faire !?!?)

Si ça te dit de me fournir un petit indice quand le moment t'en dira, n'hésite pas...

MERCI =)
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
c'est tres simple a faire avec string et un vector

std::ifstream im("image_CUBEtot.vu");
std::string line;
std::vector< std::string > v_lines;

while ( std::getline( line, im) )
{ if( line !"Coo" && line != "{" )
{
v_lines.push_back(line);
}
}