Charger un tableau depuis un fichier text

hdinn Messages postés 5 Date d'inscription mardi 16 mars 2004 Statut Membre Dernière intervention 28 février 2010 - 28 févr. 2010 à 22:24
besilent Messages postés 4 Date d'inscription jeudi 18 février 2010 Statut Membre Dernière intervention 10 mars 2010 - 1 mars 2010 à 23:37
Salut a tous,bin.... je voulais charger un tableau depuis les valeur d'un fichier text.
mon fichier txt contient comme ci:
0 1 1 0
1 0 1 0
1 1 0 1
0 0 1 1

et je veux faire à l'affichage comme ci

zero un un zero
un zero ..... etc

Merciii

2 réponses

besilent Messages postés 4 Date d'inscription jeudi 18 février 2010 Statut Membre Dernière intervention 10 mars 2010 4
1 mars 2010 à 23:37
Si j'ai bien compris, tu veux mettre dans un tableau le contenu d'un fichier.

J'ai fais des fonctions pour ça.
En gros, il faut d'abord récupérer la taille de ton fichier texte.
Ceci pour allouer la bonne taille au tableau que tu va déclarer et allouer pour sauvegarder ton fichier.

Pour ça utilise cette fonction

int LongueurFichier( char *CheminFichier )
{
    FILE *Fichier = fopen(CheminFichier,"r");
    int Longueur=0;
    char c;

    if(Fichier != NULL)
      {
               while(fscanf(Fichier,"%c",&c) != EOF)
                    {
                        Longueur++;
                    }
      }

    fclose(Fichier);
    return Longueur;
}


Exemple
int Longueur = LongueurFichier("c:\\rep1\\rep2\\fichier.txt");


Une fois que tu connais la taille de ton fichier, tu peux faire l'allocation pour ton tableau.

void MemoriserFichier( char *CheminFichier, char *Chaine )
{
    FILE *Fichier = fopen(CheminFichier,"r");

    if( Fichier != NULL && Chaine != NULL )
      {
               int i=0;
               char c;
               while(fscanf(Fichier,"%c",&c) != EOF)
                    {
                        Chaine[i]=c;
                        i++;
                    }
      }

    else perror("\n\n MemoriserFicher ");

    fclose(Fichier);
}


Exemple :
char *tableau = (char *)malloc( Longueur*sizeof(char) );
MemoriserFichier("c:\\rep1\\rep2\\fichier.txt", tableau);


Maintenant ton fichier est sauvegardé dans le tableau 'tableau'.

Comme ton tableau est une chaine de caractères, en récupérant le contenu de ton fichier il a récupérer également les caractères de contrôles tels que '\n' ( saut de ligne <=> touche entrée ), '\t' ( tabulation <=> touche tab ). Cela dépend de l'agencement de ton fichier. Apparement tu as au moins des \n.

Après à toi de gérer tous cela.

Tu voudras peut être traiter des entiers et non des caractères si ça te gêne, mais ce n'est pas un problème en soit, tu peux faire avec l'un comme l'autre.
Du coup voici une fonction qui transforme en entier une chaine de caractères c'est à dire ton tableau 'tableau'.

//////////////////////////////////////////////////////////////////////////////////////////////////////////////
// CharToInt : Permet de convertir un caractère en entier
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// ENTREE
//   - char *s        : la chaine de caractères à transformer
//   - int  *d        : Le tableau qui va contenir la convertion des caractères en entiers.
//   - int   taille_s : La taille de la chaine de caractère s
//
/////////////////////////////////////////////////////////////////////////////////////////////////////////////

void CharToInt( char *s, int *d, int taille_s )
{
    if ( s != NULL && d != NULL )
    {
        /* Chaine temporaire qui transforme un caractère en chaine de caractères pour la fonction atoi */
        char temp[2]="";

        /* On parcours toutes la chaine s */
        int i;
        for ( i=0 ; i<taille_s ; i++ )
        {
            /* On transforme le caratère courant en chaine de caractères */
            sprintf(temp, "%c", s[i]);

            /* On le convertit en entier pour le stocker dans le tableau d'entiers */
            d[i] = atoi(temp);
        }
    }

    else perror("\n\n CharToInt ");
}


Exemple :
int tableauEntier = (int *)malloc( Longueur*sizeof( int ) );
void CharToInt( tableau, tableauEntier, Longueur );
4
shorzy Messages postés 94 Date d'inscription jeudi 23 novembre 2000 Statut Membre Dernière intervention 1 juin 2013
1 mars 2010 à 00:26
Tu utilises quelle Library.

if(MyStream[n] == '0')
cout << "Zéro ";
else if(...

Au lieu de cout tu peux utiliser n'importe quel Flux !!!


++
0
Rejoignez-nous