J'aurais bien aimé que quelqu'un prenne le relais car je suis pas a l'aise avec le c++ "pur" et les strings!
Personnellement je ferais un mini parser caracteres par caractere:
Code :
- void readFromFile(char* filename)
- {
- // le constructeur de ifstream permet d'ouvrir un fichier en lecture
- std::ifstream fichier( filename );
- std::string s;
- int i = 0 ;
- int j = 0 ;
- char c;
- if ( fichier ) // ce test échoue si le fichier n'est pas ouvert
- {
- std::stringstream buffer; // variable contenant l'intégralité du fichier
- // copier l'intégralité du fichier dans le buffer
- buffer << fichier.rdbuf();
- // nous n'avons plus besoin du fichier !
- fichier.close();
- // manipulations du buffer...
- //std::cout << "Taille du buffer : " << buffer.str().size() << '\n';
- int nombre = 0;
- bool dansnombre = false, derniernombre = false;
- while (buffer.good()) // tant qu'on n'est pas a la fin du buffer
- {
- c = buffer.get(); // on extrait un caractere
- // std::cout << c;
- switch (c)
- {
- case '0': case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
- // on forme le nombre:
- if (dansnombre == false)
- nombre = 0;
- nombre = 10*nombre + (c - '0');
- std::cout << nombre << std::endl;
- dansnombre = true;
- derniernombre = false;
- break;
- case '|': //un nombre correct est suivi directement par '|' donc on l'affiche
- if (dansnombre == true && derniernombre == false)
- {
- std::cout << "---->:" << nombre << std::endl;
- }
- dansnombre=false;
- break;
- case '\n':
- derniernombre = true;
- break;
- default: //pour supprimer les espaces!
- ;
- }
- }
- }
- }
|
Les nombres qui sont précédé de "----->" sont a rangé dans ton tableau.
Le principe est qu'un nombre acceptable est suivi directement (avec ou sans espace) de "|" et ce sur la meme ligne
Message édité par breizhbugs le 02-12-2007 à 13:06:13