Caractére d'un fichier dans un tableau

Résolu
ender08450 Messages postés 7 Date d'inscription mardi 26 décembre 2006 Statut Membre Dernière intervention 27 décembre 2006 - 27 déc. 2006 à 15:22
ender08450 Messages postés 7 Date d'inscription mardi 26 décembre 2006 Statut Membre Dernière intervention 27 décembre 2006 - 27 déc. 2006 à 16:46
/* En gros, ce que je voudrais faire: L'utilisateur rentre le nom d'un fichier texte, et le programme que j'essai de faire
dois rentrer tous les caratéres de ce fichier dans un tableau à une dimenion. J'arrive à ouvrir le fichier, à lire le tableau à
la fin.
Mais je n'arrive pas à rentrer les tous les caractéres dans mon tableau.
J'ai aussi un petit doute de pointeur vers fichier dans le programme principale.
Je suis un débutant, il est frot probable qu'il y est d'autre erreurs ...désolé*/



#include<stdio.h>                               
#include<string.h>                               
#include<stdlib.h>   
#include                 //je sais y en a un peu trop, mais ca me servira plus tard.
#include<conio.h>
#include<math.h>               

#define MAX 10000                    // Nombre maximal de caractére du texte à mettre ds le tableau

//fonction pour l'ouverture du fichier
int OUVERTURE()
{
    FILE *fichier;
    char nomfichier[100];
    int i=0;
   
    cout<<endl<<"Saisissez le nom du fichier a ouvrir: ";
    cin>>nomfichier;
   
    fichier = fopen(nomfichier,"r");
   
    if(fichier==NULL)
       cout<<endl<<"Probleme lors de l'ouverture du fichier"<<endl;
    else
        {
            cout<<endl<<"Ouverture du fichier réussi"<<endl;
            i = 1;
        }
    return i;
}//fin de la fonction pour l'ouverture du fichier    

      

//programme principale
int main()
{
    OUVERTURE();
   
    FILE    *fichier; //je me demande si dans "fichier" il y a toujours le fichier texte que j'ai demandé  
                               d'ouvrir dans la fonction. et sinon, comment faire ?    
    int        i = 0;
    char    Tab[MAX];

    //C'est là que ca coince, Je voudrais rentrer tous les caractéres du fichier dans un tableau à une dimension.
    //Et ce en utilisant la fonction fgets ! ou fscanf !
    //Si vous pouviez me montrer les deux solutions ou me dire qu'elle est là différence, ce serait cool!
    while(!feof(fichier) && i<MAX)
    {       
        fgets(Tab[i],char,fichier);
        i=i+1;
    }   
   
    i=0; //je réinitialise mon compteur
   
    // On affiche le tableau pour etre sur que tout s'est bien passé...
     while(i<MAX)
      {
      printf("%c\n",Tab[i]);
      i=i+1;
      }
 
    
    system("PAUSE");
    return 0;

}

7 réponses

SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
27 déc. 2006 à 16:15
fscanf(fichier,"%c",&Tab[i]);




C++ (@++)<!--
3
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
27 déc. 2006 à 15:30
yop,

fgets(Tab[i],char,fichier); ? déjà char ne veut rien dire ;) sizeof(char) serai mieu. Mais pour être sur de récupérer 1 caractère a la fois utilise plutot la fonction fgetc ;) comme ca tu lit ton fichier caractères par caractères :p et les problèmes partirons .

++
deck_bsd
___________________________________
[http://deck-bsd.eurower.net]
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
27 déc. 2006 à 15:49
Je me répette mais...
Évitez de lire un fichier caractère par caractère. C'est mortel niveau performence. Beaucoup plus rapide de lire tout d'un coup dans un buffer.
Exemple:

#include <stdlib.h>
#include <stdio.h>
#include

FILE *fichier = fopen("fichier", "r");
char *buffer;
int len;

if(!fichier) return 0;

len = _lseek(fichier->_file, 0, SEEK_END);

_lseek(fichier->_file, 0, SEEK_SET);

buffer = (char*)malloc(len+1); if(!buffer) goto closefile;

if(fread(buffer, 1, len, fichier) != len) goto freebuf;
buffer[len] = 0;

printf("%s\n", buffer);

freebuf:
free(buffer);
closefile:
fclose(fichier);

C++ (@++)<!--
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
27 déc. 2006 à 15:53
Et aussi, ton fichier dans ton main de pointe sur rien. Ça ne fonctionne pas comme ça. On ne transfère pas une valeur d'une fonction a une autre en la redéclarent simplement. Il faudrait que ton OUVERTURE retourne fichier pour faire comme suit dans ton main:

FILE *fichier = OUVERTURE();

Ou alors, tout faire directement dans une fonction ou dans main.

C++ (@++)<!--
0

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

Posez votre question
ender08450 Messages postés 7 Date d'inscription mardi 26 décembre 2006 Statut Membre Dernière intervention 27 décembre 2006
27 déc. 2006 à 15:58
J'ai reéditer mon programme(notament le prb de fichier qui pointait sur rien), il marche mais plante à la partie ou je veux rentrer les caractéres dans mon tableau.
SAKingdom, ta solution semble parfaite, mais je ne voudrais utiliser que fscanf ou fgets, c'est un projet à faire en cours, et nous n'avons pas vue les fonctions que tu utilises. Je suis un débutant.






/* En gros, ce que je voudrais faire: L'utilisateur rentre le nom d'un fichier texte, et le programme que j'essai de faire
dois rentrer tous les caratéres de ce fichier dans un tableau à une dimenion. J'arrive à ouvrir le fichier, à lire le tableau à
la fin.
Mais je n'arrive pas à rentrer les tous les caractéres dans mon tableau.
Je suis un débutant, il est frot probable qu'il y est d'autre erreurs ...désolé*/



#include<stdio.h>                                
#include<string.h>                                
#include<stdlib.h>    
#include                 //je sais y en a un peu trop, mais ca me servira plus tard.
#include<conio.h>
#include<math.h>                

#define MAX 10000                    // Nombre maximal de caractére du texte à mettre ds le tableau

int main()
{
    FILE *fichier;
    char nomfichier[100];
    char Tab[MAX];
    int i=0;

    
    cout<<endl<<"Saisissez le nom du fichier a ouvrir: ";
    cin>>nomfichier;
    
    fichier = fopen(nomfichier,"r");
    
    if(fichier==NULL)
       {
       cout<<endl<<"Probleme lors de l'ouverture du fichier"<<endl;
       system("PAUSE");
       exit(0);
       }
    else
        cout<<endl<<"Ouverture du fichier réussi"<<endl;
        

    //C'est là que ca coince, Je voudrais rentrer tous les caractéres du fichier dans un tableau à une dimension.
    //Et ce en utilisant la fonction fgets ! ou fscanf ! Mais je sais pas trop les utiliser.
    //Si vous pouviez me montrer les deux solutions ou me dire qu'elle est là différence, ce serait cool !
    while(!feof(fichier) && i<MAX)
    {        
        fscanf(fichier,"%c",Tab[i]);
        i=i+1;
    }    
    
    
    i=0; //je réinitialise mon compteur
    
    
    // On affiche le tableau pour etre sur que tout s'est bien passé...
     while(i<MAX)
      {
      printf("%c\n",Tab[i]);
      i=i+1;
      }
 
     
    system("PAUSE");
    return 0;

}
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
27 déc. 2006 à 16:24
#include<stdio.h>                                
#include<string.h>                                
#include<stdlib.h>    
#include

Heu tu nous fait un gros mélange de C et de C++ et dans ton code aussi, en quel langage dois-tu faire ce programme ?

++
deck_bsd
___________________________________
[http://deck-bsd.eurower.net]
0
ender08450 Messages postés 7 Date d'inscription mardi 26 décembre 2006 Statut Membre Dernière intervention 27 décembre 2006
27 déc. 2006 à 16:46
en c++
0
Rejoignez-nous