Lecture fichier C++

Signaler
Messages postés
31
Date d'inscription
lundi 27 mai 2002
Statut
Membre
Dernière intervention
24 novembre 2004
-
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
-
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

12 réponses

Messages postés
627
Date d'inscription
mercredi 16 juin 2004
Statut
Membre
Dernière intervention
24 juillet 2011

Bonjour ! Ben pr faire cela, je te dis d'avance qu'il faut que le fichier que tu vas lire soit un fichier texte ou dans le genre !

Je te fais la fct DOS... :-) BruNews te la fera p-e en Win32 ;-)

int lineCnt;

cout << "Entre le numéro de ligne à lire : ";
cin << lineCnt;

FILE* fp;
if ((fp fopen("your file.txt", "r")) NULL) return;

char depot[MAX_PATH];
int occ = 1;

while (fgets(fp, depot))  { // ou un truc du genre ;-)

   if (occ == lineCnt) {

    cout << endl << "ligne : " << depot;
    break;
   }

  occ++;
 }


Voila, si t'as d'autres questions... ;-))

Gendal67, à votre service !
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
TXT VERS LISTBOX (WIN32)
http://www.cppfrance.com/code.aspx?id=25258

ou comment detailler les lignes avec 2 pointeurs sur un buffer, vitesse assuree.

ciao...
BruNews, MVP VC++
Messages postés
31
Date d'inscription
lundi 27 mai 2002
Statut
Membre
Dernière intervention
24 novembre 2004

mon pb c'est que mon fichier peut faire 10 000 000 lignes au maximum
donc le faiot de lire par ligne c'est trop long
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
Gendal67 > ce que tu fais n'a rien à voir avec dos, c'est juste du c

et oubli cin/cout (c'est du c++) utilises les e/s c
Messages postés
627
Date d'inscription
mercredi 16 juin 2004
Statut
Membre
Dernière intervention
24 juillet 2011

Oui oui, djl, lol ! Quelle connerie j'ai dis moi encore!!! mdr! oui, c'est du C.... mais pk serait il préférable d'oublier le cin/cout ? Toute façon ici c'était juste pour l'exemple ;-)

Gendal67, à votre service !
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
ben si tu fais du c, fais du c, ou sinon du c++ mais ne melange surtout pas les 2 !

ce sont 2 langages distincts mais en parti compatible, d'ou le piege

en c ansi

{

FILE* fp;
size_t lineCnt, occ = 1;
char depot[MAX_PATH];

fputs( "Entre le numéro de ligne à lire : ", stdout );
fflush( stdout );
/* saisie sans controle */
sscanf( "%d", &lineCnt );
if( (fp fopen("your file.txt", "r")) NULL ) return;

while( fgets( depot, sizeof depot, fp) )
{
if (occ == lineCnt)
{
printf( "ligne : %s\n", depot );
break;
}

occ++;
}

fclose( fp );

}
Messages postés
31
Date d'inscription
lundi 27 mai 2002
Statut
Membre
Dernière intervention
24 novembre 2004

en fait voila mon code

char main(int argc, char* argv[])
{

int lign = atoi(argv[1]);
char *test;
// le constructeur de ifstream permet d'ouvrir un fichier en lecture
    std::ifstream fichier( "combinaisons" );
std::string ligne;
    if ( fichier ) // ce test échoue si le fichier n'est pas ouvert
    {
        int lines = 0; 

while ( fichier.ignore( std::numeric_limits::max(), '\n' ) ) 
{ 
++lines; 
if( lines == (lign-1))
{
std::getline( fichier, ligne ) ;
test = &ligne
break;
}
}

// afficher la ligne à l'écran 
        std::cout << ligne << std::endl; 

    }

return test;
}



comme vous le voyez j'essaye de renvoyer la ligne lue
mais cela ne marche pas
comment je peux faire pour renvoyer le contenu ligne
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
main DOIT retourner un int

remplace

test = &ligne

par

char * test = new char[ligne.size() +1];
std::strcpy( test, ligne.c_str() );

mais surtout fais ca uniquement si tu dois utiliser par la suite des char*, sinon reste avec std::string, et oublis pas c_str() en cas de besoin
Messages postés
31
Date d'inscription
lundi 27 mai 2002
Statut
Membre
Dernière intervention
24 novembre 2004

bah le probleme c'est que ce programme est appelé par un autre programme qui doit absolument récupérer une chaine de caractère
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
dans ce cas ecris ta string sur le stdout

std::cout << ligne << std::endl;

pour lancer un programme et récuperer son stdout, c'est dépendant du systeme

pour faire simple, si le standard posix est supporté (systèmes unix, wnt en parti), tu as popen/pclose
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
bj

meme si tion fichier est tres grand,

tu l'ouvre en mode caractere et tu récupère la chaine située entre le xieme '\n' et le (x+1)eme

simply
++
Magic Nono: l'informagicien! 8-)
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
et comme l'a dit biscot19
tu fais termine ta boucle avec un break

Magic Nono: l'informagicien! 8-)