Rouliann
Messages postés115Date d'inscriptionsamedi 20 décembre 2003StatutMembreDernière intervention23 août 2008
-
10 mars 2005 à 20:21
Rouliann
Messages postés115Date d'inscriptionsamedi 20 décembre 2003StatutMembreDernière intervention23 août 2008
-
21 mars 2005 à 18:45
Bonjour tout le monde!
J'aimerais connaitre une méthode simple pour lire des chiffres dans un fichier texte.
Les chiffres sont séparés par des virgules et le retour à la ligne est signalé par un point-virgule. Exemple:
int i =0, x= 0, y=0;
int val =0;
while(i<size)
{
switch(*buffer)
{
case ',':
case '\n':
break;
case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7':
case '8': case '9': if( (*(buffer+1))>= '0' && (*(buffer+1))<='9' )
{
val=(*buffer-48)*10 + (*(buffer+1)-48);
buffer++;
}
else
{
val =(*buffer-48);
}
if(x>=10){ x=0; y++; }
map[x][y]=val;
x++;
break;
}
buffer++;
i++;
}
--------------------------------------------------------
En fait j'ai mis tout le fichier en mémoire c'est plus simple et puis comme c'est pas un gros fichier ca prend pas beaucoup de mémoire ^^
++
____________________
**Rouliann** Life is short, program more!
cs_Telepathmaster
Messages postés46Date d'inscriptionvendredi 31 octobre 2003StatutMembreDernière intervention 7 août 2008 10 mars 2005 à 22:06
Ou même faire avancer d'un rang dans le fichier et, si le caractère n'est ni une virgule ni un ; , copier dans la case suivante du tableau c faisable aussi avec
int i=0;
char buffer;
fichier.open("test", ios::in );
while(fichier.read(&buffer, 1)) { if ( (buffer != ',' ) && (buffer != ';' )) { tablo[i] = buffer - 48 ; ++i; } }
cs_Telepathmaster
Messages postés46Date d'inscriptionvendredi 31 octobre 2003StatutMembreDernière intervention 7 août 2008 10 mars 2005 à 23:03
j'ai oublié de préciser si tu n'a jms utilisé ça, tu remplace test dans fichier.open("test" ... ); par le nom de fichier et son extension. N'oublies pas
#include <fstream>
using namespace std;
cs_Telepathmaster
Messages postés46Date d'inscriptionvendredi 31 octobre 2003StatutMembreDernière intervention 7 août 2008 11 mars 2005 à 22:48
Dans ce cas vaut mieux utiliser strtok comme j'avais dit au début
qqchose de ce genre :
ifstream fichier;
char *pointe,*token ="\n;,", tablo[200];
int nbre=0
fichier.open("fichier.extension", ios::in );
if(fichier.bad()) exit(0);
long pos = fichier.tellg();
fichier.seekg( 0 , std::ios_base::end );
long size = fichier.tellg() ;
fichier.seekg( pos, std::ios_base::beg ) ;
char *bufferfich = new char[size];
while(fichier.read(&buffer, 1))
{
bufferfich[nbre] = buffer ; ++nbre;
}
pointe = strtok(bufferfich, token); // pointe contient le premier chiffre
while (pointe)
{
if (strlen(pointe) >1) {
/*là tu fais une toute petite fonction pour transformer le contenu du pointeur pointe en nombre (par ex avec atoi(pointe) ) , puis tablo[n] = entier trouvé + 48 ; */
}
else tablo[n] = pointe;
pointe = strtok(NULL, token);
}
delete bufferfich;
fichier.close();
enfin voilà qqchose de pas compliqué qui devrait marcher
cs_Telepathmaster
Messages postés46Date d'inscriptionvendredi 31 octobre 2003StatutMembreDernière intervention 7 août 2008 11 mars 2005 à 22:49
bien sur j'ai oublié
char buffer;
et tu devra changer qques trucs selon si tu veux un tableau d'entiers ou un tableau de caractères dans la dernière boucle
Rouliann
Messages postés115Date d'inscriptionsamedi 20 décembre 2003StatutMembreDernière intervention23 août 20081 12 mars 2005 à 07:49
Ok merci Telepathmaster! j'essairai ça bientot parce que tout de suite j'ai pas trop le temps...
Juste une petite précision... : "elle" est un mec! ^^
a+
____________________
**Rouliann** Life is short, program more!