[ Language C ] Copie du contenu d'un fichier dans un tableau.

Copie du contenu d'un fichier dans un tableau. [ Language C ] - C - Programmation

Marsh Posté le 10-06-2009 à 09:42:10    

Bonjour, je souhaiterai copier les entiers d'un fichier dans un tableau.
Le fichier étant exclusivement composé d'entier.
Je sais que cette question peut paraître extremement bidon mais j'en ai besoin pour la résolution d'un exercice et je n'arrive pas du tout à la faire ....
Merci de bien vouloir m'aider, bonne journée

Reply

Marsh Posté le 10-06-2009 à 09:42:10   

Reply

Marsh Posté le 10-06-2009 à 09:48:15    

google : FILE*, fopen,fread,fclose pour la partie fichier; malloc, free pour la partie allcoation mémoire dynamique

Reply

Marsh Posté le 10-06-2009 à 09:48:49    

Si tu dis pas ce que tu as déjà fait et où tu bloques exactement personne ne viendra t'aider.

 

Edit : "personne" sauf Joel F qui me contredit. :p

Message cité 1 fois
Message édité par Deamon le 10-06-2009 à 09:49:47
Reply

Marsh Posté le 10-06-2009 à 09:55:24    

Deamon a écrit :

Si tu dis pas ce que tu as déjà fait et où tu bloques exactement personne ne viendra t'aider.
 
Edit : "personne" sauf Joel F qui me contredit. :p


 
D'accord, je penser pas qu'il fallait plus d'information.  
J'ai pour exercice : Ecrire une fonction qui prend en paramètre le nom d'un fichier et une valeur entière, et insère cette valeur dans le fichier en gardant le fichier trié.
Pour cela j'ai eu l'idée de créer les fonction :
 
int *file2Array(char* Fichier1) => qui copie les éléments d'un fichier à un tableau.
 
void array2File(char* Fichier1,int *TabInt) => qui copie les éléments d'un tableau dans un fichier.
 
void insert2Array(int *TabInt, int Val) => un mix des deux fonction précédente plus un algorithme récursif pour trouver ou placer la valeur.
 
Mon problème étant que je suis relativement nule en C, surtout que je n'ai encore jamais approcher l'utilisation de fichier ( ouverture, copier, fermeture, ... ). Je pensai donc pouvoir me débrouiller si quelqu'un pouvai m'expliquer comment programmer la première fonction.

Reply

Marsh Posté le 10-06-2009 à 10:39:30    

Attention au mode d'ouverture : mode binaire ou mode texte. Le mode texte est le mode par défaut.
 
Pour des entiers, il faudrait surement prendre le mode binaire, et l'indiquer explicitement avec "b", par exemple fopen("chemin/fichier.dat", "wb" );. Si c'était en mode texte, on n'aurait pas mis le "b" ou bien on aurait mis "t". Le "w" qui précède  le "b" ou le "t" signifie write. On pourrait avoir, à la place du "w", un "a" pour append ou un "r" pour read.


Message édité par olivthill le 10-06-2009 à 10:40:18
Reply

Marsh Posté le 10-06-2009 à 10:41:22    

Je bloque toujours sur l'écriture de la première fonction, je vois bien l'utiliter des fonction fopen, fread, fclose, .... mais je ne vois pas réelement comment les utiliser.
voici un début "d'esquisse" :
int *file2Array(char* Fichier1)
{
 FILE*F1;
 char *tableau[n];
 int i;
 F1=fopen(Fichier1,"r" );  // ouverture du fichier1 en mode lecture
 fread(tableau[n],sizeof(int),n,F1)  // lecture du fichier1 stocké dans le tableau[n] (je ne suis pas du tout sur que c'est ce qu'il faut faire)
        ....
 
je réflechis encore à la suite.

Reply

Marsh Posté le 10-06-2009 à 10:46:29    

Rukh91 a écrit :

Mon problème étant que je suis relativement nule en C, surtout que je n'ai encore jamais approcher l'utilisation de fichier ( ouverture, copier, fermeture, ... ). Je pensai donc pouvoir me débrouiller si quelqu'un pouvai m'expliquer comment programmer la première fonction.


Le C, ça ne s'invente pas . On est pas "relativement nul[le] en C". On connait, ou on connait pas. C'est tout. SI tu ne connais pas, il suffit d'apprendre. Il y a de nombreux tutoriels sur le net. J'en cite quelques uns sur mon site.
 
J'ai aussi écrit cet article :  
 
http://www.bien-programmer.fr/notes.htm#fichiers
 
Enfin, pour réaliser correctement ton programme, il faut savoir si les données contenues dans le fichier sont codées sous forme textuelles (par exemple, séparés par des espaces, ou une valeur par ligne etc), ou alors sous forme binaire (sequence d'octets). Dans ce cas, il faut préciser !  
 

  • la largeur (nombre d'octets)
  • l'endianness (l'ordre des octets).


Fait de ton mieux et poste ton code si besoin est.


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 10-06-2009 à 10:50:09    

Rukh91 a écrit :

Je bloque toujours sur l'écriture de la première fonction, je vois bien l'utiliter des fonction fopen, fread, fclose, .... mais je ne vois pas réelement comment les utiliser.
voici un début "d'esquisse" :
int *file2Array(char* Fichier1)
{
 FILE*F1;
 char *tableau[n];


Pourquoi char *. Un fichier ne contient pas de pointeurs...

Citation :

Code :
  1. F1=fopen(Fichier1,"r" );  // ouverture du fichier1 en mode lecture



Correct, si tu es certain que le format du fichier est 'texte'. Tant que cette information n'est pas vérifiée, tu ne peux rien coder de sûr. Peux-tu ouvrir le fichier de données avec un éditeur de texte et en faire un copié-collé ici ?

 

Sinon, met le sur un serveur ftp et donne son url.

 

P.S. : Plus simple : donne le copié-collé exact de ton sujet. A mon avis toutes les informations sont dedans, sinon, il faut changer de prof...

  


Message édité par Emmanuel Delahaye le 10-06-2009 à 10:52:23

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 10-06-2009 à 10:57:22    

Copié-collé exact du sujet :Ecrire une fonction qui prend en paramètre le nom d'un fichier et une valeur entière, et insère cette valeur dans le fichier en gardant le fichier trié.  
 
Pour ce qui est du format du fichier, je pense que je peux imposer qu'il soit de type texte et que chaque valeurs qu'il contient est séparée par un espace.
Sinon, je penser qu'il fallait => char* dans la déclaration de fonction car doit pointer les valeurs du fichier pour pouvoir les copiées.
En tout cas merci de vos réponse.
 
Pourquoi char *. Un fichier ne contient pas de pointeurs...

Reply

Marsh Posté le 10-06-2009 à 11:16:02    

int *file2Array(char* Fichier1)
{
 FILE*F1;
 int taille;
 int t1[taille];
 int i;
 F1= fopen("Fichier1", "r" );
 
 if(F1==NULL)
        {
  fprintf(stderr,("Erreur ouverture fichier\n" ));
  exit(0);
        }
 for ( i =0 ; i < taille; i++ )
  {
  fread(&t1[i],sizeof(int),1,F1);
  fscanf(F1,"%d", &t1[i]);
  }
 fclose(F1);
}

Message cité 1 fois
Message édité par Rukh91 le 10-06-2009 à 11:25:27
Reply

Marsh Posté le 10-06-2009 à 11:16:02   

Reply

Marsh Posté le 10-06-2009 à 12:09:45    

Rukh91 a écrit :

Copié-collé exact du sujet :Ecrire une fonction qui prend en paramètre le nom d'un fichier et une valeur entière, et insère cette valeur dans le fichier en gardant le fichier trié.


On ne peut pas répondre à ce sujet si on ne connait pas le format du fichier.

 
Citation :

Pour ce qui est du format du fichier, je pense que je peux imposer qu'il soit de type texte et que chaque valeurs qu'il contient est séparée par un espace.


Admettons.

 
Citation :

Sinon, je penser qu'il fallait => char* dans la déclaration de fonction car doit pointer les valeurs du fichier pour pouvoir les copiées.
En tout cas merci de vos réponse.


Non. Pour stocker des valeurs entières, il faut, par exemple, un tableau d'int. Mais as-tu vraiment besoin de stocker toutes les valeurs ? En réfléchissant un peu, et à l'aide d'un deuxième fichier, tu pourrais recopier les valeurs lues dans un autre fichier, et en testant la valeur lue, tu pourrais déterminer le moment où tu insères la nouvelle valeur... Tu n'aurais donc besoin de ne stocker qu'une valeur à la fois.

 

Ensuite, avec rename() et remove(), on fait le ménage dans les fichiers....

 

C'est une méthode classique, sûre, mais pas très performante. Ca suffit pour quelques milliers de valeurs...

  



Message édité par Emmanuel Delahaye le 10-06-2009 à 12:10:10

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 10-06-2009 à 12:12:11    

Rukh91 a écrit :

int *file2Array(char* Fichier1)
{
 FILE*F1;
 int taille;
 int t1[taille];
 int i;
 F1= fopen("Fichier1", "r" );
 
 if(F1==NULL)
        {
  fprintf(stderr,("Erreur ouverture fichier\n" ));
  exit(0);
        }
 for ( i =0 ; i < taille; i++ )
  {
  fread(&t1[i],sizeof(int),1,F1);
  fscanf(F1,"%d", &t1[i]);
  }
 fclose(F1);
}


Que vaut 'taille' ?

 

Si c'est du format texte, le fread() ne sert à rien. Tu dois utiliser fscanf() ou équivalent.

 

Pourquoi la fonction retourne-t-elle un int * ?


Message édité par Emmanuel Delahaye le 10-06-2009 à 12:13:10

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed