Lire un fichier texte

Résolu
Rouliann Messages postés 115 Date d'inscription samedi 20 décembre 2003 Statut Membre Dernière intervention 23 août 2008 - 10 mars 2005 à 20:21
Rouliann Messages postés 115 Date d'inscription samedi 20 décembre 2003 Statut Membre Dernière intervention 23 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:

2,0,0,0,0,0,0,0,0,0,0,3;
6,0,0,0,0,0,0,0,0,0,0,8;
...

Voilà!
Merci d'avance et à bientot.

____________________
**Rouliann**
Life is short, program more!

21 réponses

Rouliann Messages postés 115 Date d'inscription samedi 20 décembre 2003 Statut Membre Dernière intervention 23 août 2008 1
21 mars 2005 à 18:45
J'ai enfin trouvé la réponse à mon problème!! Ouf!!
La réponse est ci dessous ;) :

----------------------------------------------------------------
file.open("data\\niveau1.txt", fstream::in);
if(file.bad()) exit(1);
file.seekg(0, ios::end);
size= file.tellg();
file.seekg(0, ios::beg);
buffer = new char [size];
file.read(buffer, size);

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!
3
Rouliann Messages postés 115 Date d'inscription samedi 20 décembre 2003 Statut Membre Dernière intervention 23 août 2008 1
10 mars 2005 à 20:23
Petite précision : je veux le faire en C++

____________________
**Rouliann**
Life is short, program more!
0
tibob51 Messages postés 268 Date d'inscription vendredi 30 avril 2004 Statut Membre Dernière intervention 13 mai 2013 2
10 mars 2005 à 21:42
Salut,
Tu veux en faire quoi des chiffes (mettre dans un tableau...)
0
Rouliann Messages postés 115 Date d'inscription samedi 20 décembre 2003 Statut Membre Dernière intervention 23 août 2008 1
10 mars 2005 à 21:44
Oui c'est pour les mettre dans un tableau!

____________________
**Rouliann**
Life is short, program more!
0

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

Posez votre question
tibob51 Messages postés 268 Date d'inscription vendredi 30 avril 2004 Statut Membre Dernière intervention 13 mai 2013 2
10 mars 2005 à 21:51
Undernière question tu connais les tailles de tes ligne ect..
0
Rouliann Messages postés 115 Date d'inscription samedi 20 décembre 2003 Statut Membre Dernière intervention 23 août 2008 1
10 mars 2005 à 21:54
Bin la fin de chaque ligne est signalée par un point-virgule ....
Et je connais le nombre de ligne (12)

____________________
**Rouliann**
Life is short, program more!
0
cs_Telepathmaster Messages postés 46 Date d'inscription vendredi 31 octobre 2003 Statut Membre Dernière intervention 7 août 2008
10 mars 2005 à 22:01
Tu pourrait copier tout ton fichier dans un buffer et utiliser strtok avec , et ; ?? (assez fastidieux mais je vois pas autrement)
0
Rouliann Messages postés 115 Date d'inscription samedi 20 décembre 2003 Statut Membre Dernière intervention 23 août 2008 1
10 mars 2005 à 22:05
et si on connait le nombre de chiffre par lignes on peut faire plus simple ? ^^

____________________
**Rouliann**
Life is short, program more!
0
tibob51 Messages postés 268 Date d'inscription vendredi 30 avril 2004 Statut Membre Dernière intervention 13 mai 2013 2
10 mars 2005 à 22:06
Ha en connaissnt le nombre de ligne et de chiffres quelle contienent c mieu.
0
cs_Telepathmaster Messages postés 46 Date d'inscription vendredi 31 octobre 2003 Statut Membre Derniè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; } }

ou qqchose du genre
0
tibob51 Messages postés 268 Date d'inscription vendredi 30 avril 2004 Statut Membre Dernière intervention 13 mai 2013 2
10 mars 2005 à 22:08
Moi j'etait parti sur une boucle do while
0
Rouliann Messages postés 115 Date d'inscription samedi 20 décembre 2003 Statut Membre Dernière intervention 23 août 2008 1
10 mars 2005 à 22:08
Merci je vais essayer ça! ;)

____________________
**Rouliann**
Life is short, program more!
0
cs_Telepathmaster Messages postés 46 Date d'inscription vendredi 31 octobre 2003 Statut Membre Derniè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;
0
Rouliann Messages postés 115 Date d'inscription samedi 20 décembre 2003 Statut Membre Dernière intervention 23 août 2008 1
11 mars 2005 à 18:46
Oui merci j'avais déja réussi à lire mes chiffres mais g un problème pr lire des nombre plus grand que 9 ....

____________________
**Rouliann**
Life is short, program more!
0
cs_Telepathmaster Messages postés 46 Date d'inscription vendredi 31 octobre 2003 Statut Membre Derniè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
0
cs_Telepathmaster Messages postés 46 Date d'inscription vendredi 31 octobre 2003 Statut Membre Derniè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
0
tibob51 Messages postés 268 Date d'inscription vendredi 30 avril 2004 Statut Membre Dernière intervention 13 mai 2013 2
11 mars 2005 à 22:56
Pourquoi utiliser un char?
utilise un int.
0
cs_Telepathmaster Messages postés 46 Date d'inscription vendredi 31 octobre 2003 Statut Membre Dernière intervention 7 août 2008
11 mars 2005 à 23:16
bah selon ce qu'elle veut faire ça dépend, dc si elel veut utiliser un int elle utilisera un int elle n'a que deux modifs à faire
0
tibob51 Messages postés 268 Date d'inscription vendredi 30 avril 2004 Statut Membre Dernière intervention 13 mai 2013 2
11 mars 2005 à 23:37
Oui je sai mais pour moi je croi que c'est mieu d'enregistrer ça valeur dans un int il y
aura plus de probléme avec le valeur sup a 9.
0
Rouliann Messages postés 115 Date d'inscription samedi 20 décembre 2003 Statut Membre Dernière intervention 23 août 2008 1
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!
0
Rejoignez-nous