Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2862 connectés 

  FORUM HardWare.fr
  Programmation
  C

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1893450
Rukh91
Posté le 10-06-2009 à 09:42:10  profilanswer
 

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

mood
Publicité
Posté le 10-06-2009 à 09:42:10  profilanswer
 

n°1893455
Joel F
Real men use unique_ptr
Posté le 10-06-2009 à 09:48:15  profilanswer
 

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

n°1893456
Deamon
Posté le 10-06-2009 à 09:48:49  profilanswer
 

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
n°1893461
Rukh91
Posté le 10-06-2009 à 09:55:24  profilanswer
 

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.

n°1893470
olivthill
Posté le 10-06-2009 à 10:39:30  profilanswer
 

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
n°1893471
Rukh91
Posté le 10-06-2009 à 10:41:22  profilanswer
 

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.

n°1893473
Emmanuel D​elahaye
C is a sharp tool
Posté le 10-06-2009 à 10:46:29  profilanswer
 

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/
n°1893474
Emmanuel D​elahaye
C is a sharp tool
Posté le 10-06-2009 à 10:50:09  profilanswer
 

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/
n°1893481
Rukh91
Posté le 10-06-2009 à 10:57:22  profilanswer
 

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...

n°1893495
Rukh91
Posté le 10-06-2009 à 11:16:02  profilanswer
 

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
mood
Publicité
Posté le 10-06-2009 à 11:16:02  profilanswer
 

n°1893566
Emmanuel D​elahaye
C is a sharp tool
Posté le 10-06-2009 à 12:09:45  profilanswer
 

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/
n°1893569
Emmanuel D​elahaye
C is a sharp tool
Posté le 10-06-2009 à 12:12:11  profilanswer
 

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/

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

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

 

Sujets relatifs
[Web] Problème d'affichage de contenu[Resolu]Serveur Multi Thread en C
Upload automatique d'un fichierLancer l'appli heure/zone horaire windows depuis C++
Opérations sur chaines dans un fichierrenseignement pour lancéer un fichier automatiquement tous les jours e
Trier un tableau d'entier avec ARRAYS.SORT();Langage C, Projet, Puissance 4 en langage C
lister contenu dossier linux avec Qt[C] Fork et Pipe
Plus de sujets relatifs à : [ Language C ] Copie du contenu d'un fichier dans un tableau.


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR