Découper sting substr find

9sber Messages postés 28 Date d'inscription vendredi 30 avril 2004 Statut Membre Dernière intervention 14 septembre 2004 - 17 mai 2004 à 17:21
9sber Messages postés 28 Date d'inscription vendredi 30 avril 2004 Statut Membre Dernière intervention 14 septembre 2004 - 19 mai 2004 à 10:54
Salut tout le monde.
Dans un fichier, je sauvegarde des données séparées par des tabulation \t puis lignes par lignes:

nnn hhh 20 0
fff ttt 45 1
hhhh jjj 60 0

mon problème est ensuite des récupérer ces informations.

Je souhaite procéder de la mannière suivante (d'après ce qui j'ai pu trouver dans le forum.

string ligne;
string decoupe[4];
char fichierdestable[100];
ifstream fichierdestablefile;
char buffer3[2000];

fichierdestablefile.open(fichierdestable,ifstream::in);
while(fichierdestablefile.get(buffer3,2000)){
ligne=buffer3;
decoupe[1]=ligne.substr(0,ligne.find('\t'));
decoupe[2]=ligne.substr(ligne.find('\t')+1,.............);
decoupe[3]=ligne.substr(.................,...................);
decoupe[4]=ligne.substr(ligne.rfind('\t'),strlen(buffer3)-ligne.rfind('\t'));

le prblème, vous l'aurez compris, c'est:
Je mets koi à la place des ............?

5 réponses

Hylvenir Messages postés 364 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 5 octobre 2006 2
17 mai 2004 à 19:21
Tu as du mal lire le forum....

#include <fstream>
#include <sstream>
#include <string>
using namespace std;

ifstream file( "nomfichier.txt" );
string line;
while( getline( file, line ) )
{ // Lecture d'une ligne complête dans le fichier
  istringstream iss( line );
  for ( int i = 0; i < 4; ++i )
    getline( iss, decoupe[i], '\t' );
}



aux erreurs de compilation...

// Ma participation à la saturation du net:
// http://hylvenir.free.fr
0
9sber Messages postés 28 Date d'inscription vendredi 30 avril 2004 Statut Membre Dernière intervention 14 septembre 2004
17 mai 2004 à 20:25
je ne savais pas que le getline pouvait s'utiliser de cette manière.
Merci encore
0
9sber Messages postés 28 Date d'inscription vendredi 30 avril 2004 Statut Membre Dernière intervention 14 septembre 2004
19 mai 2004 à 09:41
C'est pas mal ta solution, mais ça ne me permet de lire qu'une seule ligne.
Je l'ai modifié un petit peu, mais ca ne change pas grand chose.
Tu as du mal lire le forum....

#include <fstream>
#include <sstream>
#include <string>
using namespace std;

istringstream iss;

ifstream file( "nomfichier.txt" );
string line;
while( getline( file, line ) ){
iss.str(ligne);
for ( int i = 0; i < 4; ++i ){
getline( iss, decoupe[i], '\t' );
cout << "#test#"<<decoupe[j] << endl;}}

et là, je récupère bien les éléments de la première ligne mais pas les éléments de la seconde et suivante...
Je capture bien ces lignes dans le string ligne, mais la découpe ne se fait pas!
Le pb vient en fait du "getline( iss, decoupe[i], '\t' ); " mais je vois pas comment le résoudre.
0
Hylvenir Messages postés 364 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 5 octobre 2006 2
19 mai 2004 à 10:19
tu crées un fichier data.txt contenant des colonnes séparées par des tabulations, et ce programme devrait tout découper comme il faut. A toi de stocker les colonnes à chaque lecture de ligne.

#include
#include <string>
#include <fstream>
#include <sstream>
using namespace std;

int main()
{
ifstream file( "data.txt" );

string line;
while( getline( file, line ) )
{
cout << "Ligne [" << line << ']' << endl;

istringstream iss( line );

string column[4];
for ( int i = 0; i < 4 && getline( iss, column[i], '\t' ); ++i )
cout << "Column " << i << " [" << column[i] << ']';

cout << endl;

}
}

Ma participation à la saturation du net:
http://hylvenir.free.fr
0

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

Posez votre question
9sber Messages postés 28 Date d'inscription vendredi 30 avril 2004 Statut Membre Dernière intervention 14 septembre 2004
19 mai 2004 à 10:54
Ok, j'ai résolu mon pb avec
istringstream iss( line );

En fait, je faisais iss.str(line);

Je trouve comme même bizzard la multi création d'un objet istringstream ayant le même nom dans la même methode.
Même ci la boucle finit puis recommence...
0
Rejoignez-nous