cs_sergio18
Messages postés18Date d'inscriptionvendredi 20 février 2004StatutMembreDernière intervention 4 mai 2004
-
28 mars 2004 à 21:09
Hylvenir
Messages postés364Date d'inscriptionmercredi 11 février 2004StatutMembreDernière intervention 5 octobre 2006
-
29 mars 2004 à 10:38
Bonjour
j'ai un soucis pour recuperer une chaine de caractère.voici le code:
cs_sergio18
Messages postés18Date d'inscriptionvendredi 20 février 2004StatutMembreDernière intervention 4 mai 2004 28 mars 2004 à 21:30
ouf ça a l'air compliqué ton truc.Mais moi il faut que je lise le fichier lignes par lignes parce que apres je dois isoler le premier mot de chaque ligne.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 28 mars 2004 à 21:35
Les lignes se trouveront encore plus vite dans le buffer.
2 pointeurs suffisent pour detailler les lignes.
J'ai deja traite cela de nombreuses fois entre le forum et les sources.
// Positioner le pointeur au debut du fichier
SetFilePointer( MonFichier, 0, 0, FILE_BEGIN) ;
// Lire dans le fichier
ReadFile(MonFichier, Buffer, 5000, &dwActBytes, NULL);
// Mettre un caractère nul à la fin de la chaîne de caractère
// Sans cette ligne, des caractères quelconques s'ajoutent à la lecture
Buffer[dwActBytes]=0;
et crois tu qu'à partir de là je peux obtenir mes lignes?
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 28 mars 2004 à 22:19
Si tu dois seulement le lire, c'est ainsi:
MonFichier = CreateFile(NomFichier.c_str(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
SetFilePointer INUTILE, deja au debut
ATTENTION si dwActBytes est 5000 alors:
Buffer[dwActBytes]=0; CRASH
Faut lire 1 octet de moins que taille buffer pour encore ajouter un zero a la fin.
char *c, *d;
c = buffer;
a chaque rencontre de 13 ou 10 NOUVELLE LIGNE.
En avant.
Hylvenir
Messages postés364Date d'inscriptionmercredi 11 février 2004StatutMembreDernière intervention 5 octobre 20062 29 mars 2004 à 10:38
[C++]
deux méthodes,
1. le fichier ne contient pas de ligne vide. ou tu te moques
de les manquer
2. le fichier contient des lignes vides mais il faut que
tu les comptes par exemple.
principe : l'opérateur >> découpe par "mot" en lisant une chaîne dans un flux.
la fonction getline( file, string ) permet de lire une chaîne
de taille non définie variable (lecture par ligne)
// ---------------------------------------
#include
#include <fstream>
#include <sstream>
using namespace std;
int main()
{
ifstream file( "data.txt" );
// --- méthode 1
string mot;
while( file >> mot )
{
cout << "le premier mot est [" << mot << "]" << endl;
file.ignore( 512, '\n' );
}
// --- méthode 2
string line;
while( getline( file, line ) )
{
istringstream iss( line );
string mot;
iss >> mot;
cout << "le premier mot est [" << mot << "]" << endl;
}
}