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

MissSixty Messages postés 18 Date d'inscription mardi 10 août 2004 Statut Membre Dernière intervention 25 août 2004 - 16 août 2004 à 22:33
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 - 17 août 2004 à 08:53
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

cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
16 août 2004 à 23:43
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
0
cs_Arnotic Messages postés 933 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 9 janvier 2012
16 août 2004 à 23:51
C'est beau les librairies, ...
Et niveau performence ?
Un petit listing asm pour rigoler.

@+
Arnotic,
Admin CS, MVP Visual C++
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
16 août 2004 à 23:57
c'est moins performant mais c'est securisé

et quand je vois un code qui fuis...
0
cs_Arnotic Messages postés 933 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 9 janvier 2012
17 août 2004 à 00:10
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++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
MissSixty Messages postés 18 Date d'inscription mardi 10 août 2004 Statut Membre Dernière intervention 25 août 2004 1
17 août 2004 à 04:44
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 =)
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
17 août 2004 à 08:53
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);
}
}
0
Rejoignez-nous