Lecture fichier C++

Fermé
flo - 22 nov. 2004 à 17:30
 flo - 23 nov. 2004 à 11:44
bonjour,
je voudrais savoir comment faire pour lire un fichier ligne par ligne

par exemple je demande a mon prog de lire la 3eme ligne
il doit me retourner tou ce qu'il y a écrit a cette ligne


mon probleme est que je n'arrive pas a me positionner par ligne mes seulement par caractere. hors mes lignes ont des nombres de caracteres differents
A voir également:

4 réponses

blurk Messages postés 486 Date d'inscription vendredi 16 avril 2004 Statut Membre Dernière intervention 15 mars 2009 160
22 nov. 2004 à 18:52
salut!
#include <stdio.h>

#define LONGUEUR 255 
// à modifier  de façon à dépasser la longueur prevue

int main(void)
{
FILE *safe;
char machaine[LONGUEUR]; 
safe=fopen("nomdufichier.txt","r");
fgets(safe,LONGUEUR,machaine);
printf("%s",machaine);
fclose(safe);
}


-chaque fgets suivant lira la ligne suivante jusqu'au retour chariot
-on peut utiliser aussi fscanf, mais c'est plus lourd
- fgets ne supprime pas le retour à la ligne en fin de chaine

et voilà
a+
¤
0
oui mais là je suis obligé de lire ligne par ligne

mon fichier peut faire 10 000 000 de lignes au maximum

ça va etre long
0
blurk Messages postés 486 Date d'inscription vendredi 16 avril 2004 Statut Membre Dernière intervention 15 mars 2009 160
23 nov. 2004 à 11:42
tu peux aussi lire caractère par caractère, mais c'est encore plus long.
La troisième solution, c'est fread / fwrite, qui nécessite de connaitre à l'avance la taille de ce que tu vas lire, et l'utilisation de structures.
si les lignes font toutes exactement le même nombre d'octets c'est possible, sinon walou.

un truc aussi, ce qui est long, c'est surtout le fichier,
et le traitement si il est mal optimisé.
Croire qu'on va lire 10 milions de lignes autrement que ligne par ligne
et pouvoir les discerner l'une de l'autre est une contradiction.
comment compter les lignes et détecter fin de fichier sans lire de ligne ?

¤
0
bah la taille de chaque ligne je peux la connaitre en fonction de la ligne que je veux car la taille augmente progressivement.
0