Manipulation d'un fichier

Signaler
Messages postés
38
Date d'inscription
jeudi 29 juin 2006
Statut
Membre
Dernière intervention
20 février 2008
-
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
-
slt;
c'est une programme pour ouvrire un fichier
'toto.txt', la premiere partie est pour afficher le cntenu de fichier
dans la cosole et la deuxiéme partie pour compter le nombre de ligne de
meme fichier.et comme vous pouvez noté que j étais obligé de faire 2
fois le" ifstream" car si je met les 2 partie sous la meme ifstream il
ne m'a ffiche que la première.


#include

#include <fstream>

#include <string>

#include

using namespace std;


int main()

{

// le constructeur de ifstream permet d'ouvrir un fichier en lecture

ifstream fichier( "toto.txt" );


if ( fichier ) // ce test échoue si le fichier n'est pas ouvert

{

string ligne; // variable contenant chaque ligne lue

while ( getline( fichier, ligne,'\0') )

{

cout << ligne << endl;

}


ifstream fi ("toto.txt" );


int lines = count(

istreambuf_iterator<char>( fi ),

istreambuf_iterator<char>(),

'\n' );


// cette boucle s'arrête dès qu'une erreur de lecture survient


// afficher la ligne à l'écran

cout << lines << endl;

}

}


le fihier "toto.txt":


2958 ; 2944 ; 2980 ; 2971 ; 2981 ; 2956 ; 2964 ; 2987 ; 2968 ; 29 ;

2991 ; 3017 ; 3016 ; 3025 ; 3032 ; 3043 ; 2994 ; 3008 ; 2994 ; 3008 ;


le resultat affiché sur la console est un string "ligne" comment il faut faire pour le faire afficher comme un integer??, et

une derniere question comment il faut faire pour changer le ';' en ",
"dans le resultat finale.je pense que je suis un peu chiant.

merci pour votre réponse

1 réponse

Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Oue tu es chiant, car ce pb tombe 10 fois par semaines. Si tu prenais
le temps de regarder le forum, tu aurais probablement ta réponse.
Cependant, arrete de bricoler avec 2 ifstream, et dis toi que si ca
marche pas avec un, l'erreur vient de toi. Et faut pas que tu
t'autorises du bricolage sous prétexte que: "tiens comme ca, ca marche".


Une bonne chose serait ptet de revenir au début du fichier apres ta
série de getline non ? Car forcément, si tu lis apres le fichier, ca
bloque. fichier.seekg(0) pour revenir au début.


Pour convertir en entier, faut pas extraire dans un string, mais:

int valeur; char point;

file >> valeur;

file >> point;

file >> valeur;

etc ... c'est un peu pourri, mais au moins, ca marchera, sauf si ton
fichier ne respecte par exactement le schéma: entiers séparés par ";".

Ou tu peux faire la meme chose en chargeant dans un std::istringstream;

getline( fichier, ligne,'\0')

std::istringstream iss(ligne);

iss >> entier;

iss >> point;

iss >> entier;