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

  FORUM HardWare.fr
  Programmation
  C

  Vecteur dans fichier

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Vecteur dans fichier

n°1709585
pepito17
Posté le 29-03-2008 à 02:32:01  profilanswer
 

Bonjour tout le monde,  
 
Je me demandais, comment fait on pour enregistrer un vecteur dans un fichier ??
 
Devons nous d'abord utiliser une boucle pour creer ce vecteur qui contiendra des nombre trier par ordre croissant.
Puis une deuxieme boucle qui enregistrera chaque element du vecteur dans le fichier ?
 
OU
 
Trier donc le vecteur et dés qu'un element est positionner l'enregistrer dans le fichier ?
 
Aidez moi parce que la je vois pas comment faire.
 
Merci d'avance et a tres bientot.

mood
Publicité
Posté le 29-03-2008 à 02:32:01  profilanswer
 

n°1709601
Ace17
Posté le 29-03-2008 à 09:25:02  profilanswer
 

Si ton but c'est juste d'enregistrer un vecteur dans un fichier, je vois pas ce que le tri vient faire dans l'histoire.

n°1709658
Taz
bisounours-codeur
Posté le 29-03-2008 à 13:26:36  profilanswer
 

std::copy + stream_iterator
 

Code :
  1. #include <vector>
  2. #include <iostream>
  3. #include <ostream>
  4. #include <algorithm>
  5. #include <iterator>
  6. #include <string>
  7. template<typename Iterator>
  8. void dump(Iterator begin, Iterator end, std::ostream& out, const std::string& separator = "|" )
  9. {
  10.   std::copy(begin, end, std::ostream_iterator<typename Iterator::value_type>(out, separator.c_str()));
  11. }
  12. int main()
  13. {
  14.   std::vector<int> ints;
  15.   ints.push_back(7);
  16.   ints.push_back(7);
  17.   ints.push_back(82);
  18.   dump(ints.begin(), ints.end(), std::cout);
  19. }


 
Digère ça et interdiction de demander comment on fait pour lire avant d'avoir lu la documentation relative à tout ça.

n°1709740
xilebo
noone
Posté le 29-03-2008 à 19:38:26  profilanswer
 

oui mais ca c'est du C++  :o

n°1709812
pepito17
Posté le 29-03-2008 à 23:57:14  profilanswer
 

ben en fait je dois enregistrer dans un fichier un vecteur dont les nombre sont trié. Pour le moment j'utilise une fonction ki trié par ordre croissant les enregistrement qui sont dans un autre fichier sur le numero du produit.
 
Une fois fait mon vecteur contient les numero de produit trie par ordre croissant. Seulement ce vecteur je dois l'enregistrer dans un fichier mais je sais pas comment faire...
 
Aidez moi svp.
 

n°1709823
ptitchep
Posté le 30-03-2008 à 05:04:43  profilanswer
 

C'est quoi un vecteur pour toi?
C'est du C ou du C++?
Tu sais lire un fichier mais pas écrire dedans? (indice lire en anglais se dit read et ecrire write)
Si c'est du C++ t'as la réponse de Taz.
Si c'est du C, montre nous où t'en es au lieu de demander une solution toute faite.
Taz, je voulais faire un bô lien vers ton topic [BIBLIOLINK C] mais pas mal de liens sont morts il me semble:
http://forum.hardware.fr/hfr/Progr [...] 9954_1.htm

 

j'ajouterais qu'une simple recherche google: "langage C ecrire fichier" te donne absolument toutes les réponses et même des tuto dans les premiers liens (chez moi le deuxieme lien récapitule toutes les fonctions).

Message cité 1 fois
Message édité par ptitchep le 30-03-2008 à 05:19:33

---------------
deluser --remove-home ptitchep
n°1709831
Joel F
Real men use unique_ptr
Posté le 30-03-2008 à 10:47:55  profilanswer
 

ptitchep a écrit :


j'ajouterais qu'une simple recherche google: "langage C ecrire fichier" te donne absolument toutes les réponses et même des tuto dans les premiers liens (chez moi le deuxieme lien récapitule toutes les fonctions).


 
Sauf que 85654% de ces sites utilisent la méthode feof qui est débile v_v.
 

n°1709854
Taz
bisounours-codeur
Posté le 30-03-2008 à 13:04:45  profilanswer
 

(oops)
 
Trop de cours de C sont écrits par des gens qui enseignaient encore le Pascal y a 5 ans, alors l'erreur du feof, ils ne la verront jamais.

n°1709894
pepito17
Posté le 30-03-2008 à 16:31:24  profilanswer
 

je veux pas que vous me donnier du code je voudrais simplement savoir si il est possible d'enregistrer un veteur dans un fichier...
Si oui comment, si non faut il enregistrer les terme du vecteur un a un.
 
Merci

n°1709898
xilebo
noone
Posté le 30-03-2008 à 17:06:12  profilanswer
 

pepito17 a écrit :

je veux pas que vous me donnier du code je voudrais simplement savoir si il est possible d'enregistrer un veteur dans un fichier...
Si oui comment, si non faut il enregistrer les terme du vecteur un a un.
 
Merci


Oui, il est possible d'enregistrer un vecteur dans un fichier. On peut enregistrer à peu près ce qu'on veut dans un fichier d'ailleurs.
 
Comment ? En utilisant les fonctions de manipulation d'un fichier : fprintf (en mode texte), ou fwrite (en mode binaire).
 
Voici un exemple de code permettant d'enregistrer un vecteur (représenté sous forme d'une structure) dans un fichier texte.
 

Code :
  1. #include <stdio.h>
  2. struct vecteur{
  3.     int x;
  4.     int y;
  5.     int z;
  6. }
  7. typedef struct vecteur s_vecteur;
  8. int main() {
  9.     s_vecteur unvecteur;
  10.     unvecteur.x = 1;
  11.     unvecteur.y = 2;   
  12.     unvecteur.z = 3;
  13.     FILE *f;
  14.     f = fopen("vecteur.txt","wt" );
  15.     if (f != NULL) {
  16.         fprintf(f,"%d %d %d\n",unvecteur.x, unvecteur.y,unvecteur.z);
  17.        fclose(f);
  18.     }
  19.     else {   
  20.         /* erreur ouverture fichier */
  21.     }
  22.     return 0;
  23. }

mood
Publicité
Posté le 30-03-2008 à 17:06:12  profilanswer
 

n°1709919
ptitchep
Posté le 30-03-2008 à 18:37:42  profilanswer
 

Joel F a écrit :

 

Sauf que 85654% de ces sites utilisent la méthode feof qui est débile v_v.

 



Oui mais au moins il aurait quelque chose à montrer et là tu lui expliquerais pour le feof.

 


edit: du coup j'ai lu le site dont je parle il propose ça en exemple:

 
Code :
  1. int main(int argc,char *argv[])
  2. {
  3.   int source, destination;
  4.   char buffer[taillebloc];
  5.   int nb_lus,nb_ecrits;
  6.   if (argc!=3) {puts("erreur arguments" );return(1);}
  7.   if((source=open(argv[1],O_RDONLY|O_BINARY))<0)
  8.    {puts("erreur ouverture" );return(2);}
  9.   if((destination=open(argv[2], O_WRONLY| O_CREAT| O_TRUNC| O_BINARY,
  10.     S_IREAD| S_IWRITE| S_IEXEC))<0)
  11.          {puts("erreur ouverture" );return(2);}
  12.   do
  13.    {
  14.     nb_lus=read(source,(char *)buffer,taillebloc);
  15.     if (nb_lus>0) nb_ecrits= write(destination,(char*)buffer, nb_lus);
  16.    }
  17.   while ((nb_lus==taillebloc)&&(nb_ecrits>0));
  18.   close(source);
  19.   close(destination);
  20.   return(0);
  21. }


Les fonctions fopen, fread,... sont décrites en dessous mais pas d'exemple. On suppose quand même qu'il ne faut pas utiliser feof, il n'utilise pas d'eof dans l'exemple précédent...

Message cité 1 fois
Message édité par ptitchep le 30-03-2008 à 19:01:36

---------------
deluser --remove-home ptitchep
n°1709920
pepito17
Posté le 30-03-2008 à 18:57:32  profilanswer
 

Merci pour cette reponse xilebo mais comme je pourrai faire avec du binaire ? parce que si je fait comme toi ca l'enregistrera en texte moi il le faut en binaire...  
 
Merci pour ton aide

n°1709921
ptitchep
Posté le 30-03-2008 à 19:04:34  profilanswer
 
n°1709922
Elmoricq
Modérateur
Posté le 30-03-2008 à 19:12:49  profilanswer
 

pepito17 a écrit :

Merci pour cette reponse xilebo mais comme je pourrai faire avec du binaire ? parce que si je fait comme toi ca l'enregistrera en texte moi il le faut en binaire...  
 
Merci pour ton aide


 
Ben tu sors tes petits doigts muscles et tu regardes la documentation de fwrite. :o
 
Un autre lien interessant : http://mapage.noos.fr/emdel/notes.htm#fichiers

n°1709924
Joel F
Real men use unique_ptr
Posté le 30-03-2008 à 19:27:49  profilanswer
 

ptitchep a écrit :


edit: du coup j'ai lu le site dont je parle il propose ça en exemple:

 

open,read & co .. non mais c'est quoi ce bordel. Pourquoi pas les commandes systemes en asm tant qu'on y est :[


Message édité par Joel F le 30-03-2008 à 19:28:16
n°1709933
ptitchep
Posté le 30-03-2008 à 19:44:34  profilanswer
 

ptitchep a écrit : a écrit :


Les fonctions fopen, fread,... sont décrites en dessous mais pas d'exemple.



 

Ben ça récapitule tout, et le même exemple avec fopen au lieu de open, ca ne change en rien la logique... Mais bon c'est vrai que l'inverse serait plus pratique (exemple ac fopen et juste description des fonctions open,...)

 

Et puis à la base je voulais juste lui dire qu'avec google et un peu de courage sa question serait passée de :
Comment fait on pour...
à
Je n'ai pas compris le fonctionnement de ... quand je fais

Code :
  1. ...

j'ai tel problème.

 


Message édité par ptitchep le 30-03-2008 à 19:54:34

---------------
deluser --remove-home ptitchep
n°1709980
xilebo
noone
Posté le 30-03-2008 à 21:03:15  profilanswer
 

pepito17 a écrit :

Merci pour cette reponse xilebo mais comme je pourrai faire avec du binaire ? parce que si je fait comme toi ca l'enregistrera en texte moi il le faut en binaire...  
 
Merci pour ton aide


Comme on te l'a expliqué ci-dessus, le mieux est que tu regardes la documentation des fonctions. Ce sont des fonctions standard, tu la trouveras à peu près n'importe où (man "fonction" sous un linuxoide, ou sous google).
 
 
Pour écrire des données binaires dans un fichier, il faut utiliser la fonction fwrite, qui accepte en paramètre une adresse ainsi qu'une taille.
 
 
Voici un exemple de code avec fwrite :  
 

Code :
  1. #include <stdio.h>
  2. struct vecteur{
  3.     int x;
  4.     int y;
  5.     int z;
  6. };
  7. typedef struct vecteur s_vecteur;
  8. int main() {
  9.     s_vecteur unvecteur;
  10.     unvecteur.x = 1;
  11.     unvecteur.y = 2; 
  12.     unvecteur.z = 3;
  13.     FILE *f;
  14.     f = fopen("vecteur.dat","wb";);
  15.     if (f != NULL) {
  16.        fwrite(&unvecteur,sizeof unvecteur,1,f);
  17.        fclose(f);
  18.     }
  19.     else
  20.        /* erreur ouverture fichier */
  21.     }
  22.     return 0;
  23. }


Message édité par xilebo le 30-03-2008 à 21:14:05
n°1709999
pepito17
Posté le 30-03-2008 à 22:00:34  profilanswer
 

oui ca je sais comment utiliser la fonction fwrite, ... Mais je ne sais pas quel est la taille de mon vecteur.
 
J'ai mon vecteur NumProd qui se compose ainsi :
NumProd[0]=1
NumProd[1]=12
NumProd[2]=54
 
Mais je ne connais pas la taille de l'espace disponible pour un temre en n position. Sans connaitre la taille on ne sais pas utiliser fwrite et donc c'est ca mon probleme... Comment puis je faire ?
 
Merci

n°1710002
Elmoricq
Modérateur
Posté le 30-03-2008 à 22:04:54  profilanswer
 

sizeof

 

edit : ou alors j'ai pas compris la question [:dawa]


Message édité par Elmoricq le 30-03-2008 à 22:05:33
n°1710005
ptitchep
Posté le 30-03-2008 à 22:07:28  profilanswer
 

J'avoue que j'ai pas bien compris ta derniere phrase.
normalement tu crées ton tableau (tu connais donc sa taille), tu y ajoutes les éléments (tu en connais le nombre <= taille) tu le tries (si tu veux) et ensuite tu l'écris dans le fichier:
 
fwrite (NumProd, sizeof(int), nbElements, fichier); //si tes éléments sont des int.


---------------
deluser --remove-home ptitchep
n°1710006
xilebo
noone
Posté le 30-03-2008 à 22:10:52  profilanswer
 

La taille, tu la connais forcément.
 
Si ton vecteur est représenté par un tableau de n cases (n étant donc la dimension de ton vecteur), et bien la taille mémoire est égale à n fois la taille d'un élément de ton tableau.

n°1710007
pepito17
Posté le 30-03-2008 à 22:15:42  profilanswer
 

merci ptitchep, c'est ce qu'il me fallait je ne savais pas comment utiliser le sizeof.
 
Et donc, moi je le trie.
 
Je dois faire fwrite apres la position de chaque terme ou bien une fois que mon vecteur est totallement trié ?
 
Merci

n°1710013
Elmoricq
Modérateur
Posté le 30-03-2008 à 22:31:44  profilanswer
 

Je crois que tu ne comprends pas toi-meme ce que tu veux faire.

 

Pose-toi un moment, et demande-toi "pourquoi" tu dois sauver un vecteur dans un fichier.
S'en suivra naturellement la deduction de ce que tu dois converver comme donnees, et sous quelle forme.

 

Laisse le "comment" pour l'etape d'apres, une fois que tout est clair pour toi.


Message édité par Elmoricq le 30-03-2008 à 22:32:54
n°1710014
ptitchep
Posté le 30-03-2008 à 22:40:28  profilanswer
 

Dans le lien d'Elmoricq:
 
 
Déterminer la taille sans le type
 
Il est courant de déterminer la taille d'un objet en utilisant son type
 
{
   int *p = malloc (sizeof (int));
}
 
Si le type change, on est obligé de modifier 2 fois le code:
 
{
   long *p = malloc (sizeof (long));
}
 
Lorsqu'il s'agit d'un pointeur typé, il existe une technique alternative qui consiste à utiliser la taille d'un élément pointé par ce pointeur :
 
{
   int *p = malloc (sizeof *p);
}
 
Le changement de type se trouve largement simplifié :
 
{
   long *p = malloc (sizeof *p);
}
 
Ca sera mieux que mon sizeof(int).


---------------
deluser --remove-home ptitchep
n°1710019
pepito17
Posté le 30-03-2008 à 22:54:05  profilanswer
 

on ne nous a pas encore apris l'utilisation de malloc...
 
Et non je ne sais pas ce que je dois faire puisque je vous le demande...
 
je voudrais simplement savoir comment enregistrer donc un vecteur dans mon fichier...
 

n°1710021
ptitchep
Posté le 30-03-2008 à 23:00:30  profilanswer
 

pepito17 a écrit :

on ne nous a pas encore apris l'utilisation de malloc...
 
Et non je ne sais pas ce que je dois faire puisque je vous le demande...
 
je voudrais simplement savoir comment enregistrer donc un vecteur dans mon fichier...
 


c'est pas pour le malloc que j'ai mis ca, mais pour le sizeof(*p) plutot que sizeof(int).
Ben le problème c'est qu'on le comprend pas (le problème). Quand tu as rempli ton tableau, tu l'enregistres avec fwrite. Je ne vois pas quoi dire de plus...


---------------
deluser --remove-home ptitchep
n°1710022
pepito17
Posté le 30-03-2008 à 23:01:30  profilanswer
 

merci c'est ce que je voulais savoir...
 
Merci

n°1710023
ptitchep
Posté le 30-03-2008 à 23:03:46  profilanswer
 

bonne nuit alors


---------------
deluser --remove-home ptitchep
n°1710446
Elmoricq
Modérateur
Posté le 31-03-2008 à 16:08:21  profilanswer
 

pepito17 a écrit :

Et non je ne sais pas ce que je dois faire puisque je vous le demande...


 
Ma boule de cristal est chez le teinturier, je ne peux pas t'aider. [:cerveau sadnoir]

n°1711716
Emmanuel D​elahaye
C is a sharp tool
Posté le 02-04-2008 à 17:21:20  profilanswer
 

Taz a écrit :

std::copy + stream_iterator


pas du C...


---------------
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/
mood
Publicité
Posté le   profilanswer
 


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

  Vecteur dans fichier

 

Sujets relatifs
Fichier texte + drools[Résolu] Ouvrir un fichier .xsl
récupérer contenur fichier XML serveur externeExecuter n'importe quel fichier en php..
Comment copier un fichier envoyé par $GLOBALS["HTTP_RAW_POST_DATA"]Mission impossible ! fichier format df1
Besoin d'aide : récupérer les tags d'un fichier avec phpSortir des infos d'un fichier texte ?!
Lire un fichier contenant une matrice et le stocker dans un vecteur[java] Enregistrer un vecteur dans un fichier et le recupérer
Plus de sujets relatifs à : Vecteur dans fichier


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