Lecture fichier C++

biscot19 Messages postés 31 Date d'inscription lundi 27 mai 2002 Statut Membre Dernière intervention 24 novembre 2004 - 22 nov. 2004 à 17:34
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011 - 24 nov. 2004 à 15:24
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

Gendal67 Messages postés 627 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 24 juillet 2011 2
22 nov. 2004 à 22:32
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 !
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
23 nov. 2004 à 01:07
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++
0
biscot19 Messages postés 31 Date d'inscription lundi 27 mai 2002 Statut Membre Dernière intervention 24 novembre 2004
23 nov. 2004 à 10:42
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
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
23 nov. 2004 à 15:59
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
0

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

Posez votre question
Gendal67 Messages postés 627 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 24 juillet 2011 2
23 nov. 2004 à 18:30
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 !
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
23 nov. 2004 à 19:13
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 );

}
0
biscot19 Messages postés 31 Date d'inscription lundi 27 mai 2002 Statut Membre Dernière intervention 24 novembre 2004
24 nov. 2004 à 10:21
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
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
24 nov. 2004 à 11:10
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
0
biscot19 Messages postés 31 Date d'inscription lundi 27 mai 2002 Statut Membre Dernière intervention 24 novembre 2004
24 nov. 2004 à 11:18
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
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
24 nov. 2004 à 11:49
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
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
24 nov. 2004 à 15:22
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-)
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
24 nov. 2004 à 15:24
et comme l'a dit biscot19
tu fais termine ta boucle avec un break

Magic Nono: l'informagicien! 8-)
0
Rejoignez-nous