Probleme de lecture de fichier [Résolu]

Signaler
Messages postés
85
Date d'inscription
jeudi 27 mai 2004
Statut
Membre
Dernière intervention
20 février 2006
-
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
-
Voila je programme sous MFC:
Je dois lire un fichier text sour cette forme:

0 2
bonjour
2 4
salut
4 6
meme avec des espaces

par exemple si i vaut 5 ,le programme me renvoit "meme avec des espaces"

Si vous voulez plus de details.
Merci pour toutes aides.

5 réponses

Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Tu peux bien allouer 250ko d'un coup.

q = strchr(p, '\n');//position de \n
if(q)

si on n'a pas trouvé '\n' dans p, strchr renvoie p (c'est la fin du fichier)
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
En gros u veux lire la (i+1)ème ligne
Tu mets ton fichier dans un buffer (éventuellemnt en plusieurs coups si c'est une gros fichier) et tu compte les '\n'.
Par exemple si le texte est dans un char* p

while(i)
{
  p = strchr(p, '\n');
  if(!p)
  {
  // indice trop grand
  }
  i--
}
p++;
q = strchr(p, '\n')
if(q)
*q = 0;

si je me suis pas trompé tu as le résultat dans p
Messages postés
85
Date d'inscription
jeudi 27 mai 2004
Statut
Membre
Dernière intervention
20 février 2006

Je me suis mal exprimer

En fait je veux :comparer i

0 2
bonjour
2 4
salut
4 6
meme avec des espaces

<-- si i est entre le premier entier et le 2eme me renvoi le chaine de la ligne suivante sinon passe au suivant.

Merci
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
D'accord, c'est vrai que tu t'étais mal exprimé, c'était difficile de deviner ce que tu voulais faire.
En supposant que le fichier est bien constitué:
while(p)
{
if(atoi(p) < i)
{
// trouvé
p = strchr(p, '\n') + 1;
q = strchr(p, '\n');
if(q)
*q = 0;
}

p = strchr(p, '\n');
if(!p)
{
// pas trouvé
}
p = strchr(p, '\n');
if(!p)
{
// pas trouvé
}
p++;
}
Messages postés
85
Date d'inscription
jeudi 27 mai 2004
Statut
Membre
Dernière intervention
20 février 2006

Merci, je comprend pas tous mais je vais cherchez la definition des fonctions.

while(p)
{
if(atoi(p) < i)
{
// trouvé
p = strchr(p, '\n') + 1;//renvoi la position de \n dans la ligne qui contient les entiers+1(equivaut a ce place au debut de la ligne suivante?)

q = strchr(p, '\n');//position de \n

if(q) / /je ne comprend pas
*q = 0;
}

p = strchr(p, '\n');
if(!p)
{
// pas trouvé
}
p = strchr(p, '\n');
if(!p)
{
// pas trouvé
}
p++;
}
Si mon fichier fait dans les 250ko , c'est beaucoup pour un buffer, au niveau performance?
je suis debutant en c/c++, Merci