Copie du contenu d'un fichier dans un tableau. [ Language C ] - C - Programmation
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
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.
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. |
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.
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.
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.
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 !
Fait de ton mieux et poste ton code si besoin est.
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. |
Pourquoi char *. Un fichier ne contient pas de pointeurs...
Citation :
|
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...
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...
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);
}
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. |
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...
Marsh Posté le 10-06-2009 à 12:12:11
Rukh91 a écrit : int *file2Array(char* Fichier1) |
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 * ?
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