IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Sauvegarder dans un fichier en C


Sujet :

C

  1. #1
    Inactif
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 72
    Points : 33
    Points
    33
    Par défaut Sauvegarder dans un fichier en C
    Bonjour,

    est ce que quelqu'un pourrait m'indiquer,comment il faut que je m'y prenne pour sauvegarder ce que j'ai tapé,sur la ligne de commande,dans un fichier.

    Merci

  2. #2
    Membre régulier Avatar de layouni
    Inscrit en
    Mai 2004
    Messages
    119
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mai 2004
    Messages : 119
    Points : 110
    Points
    110
    Par défaut Voir les tutoriels et les cours
    Bonjour

    je vous invite à visiter ce lien http://c.developpez.com/cours/

    A+

  3. #3
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    On utilise pour ouvrir un fichier

    FILE *fopen(const char *path, const char *mode);
    Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    FILE *f = fopen("test.txt","w"); //pour ouvrir le fichier test.txt en écriture
    Ensuite, on utilise pour écrire dans un fichier fprintf qui marche comme printf mais tu mets le pointeur de fichier en premier argument.

    int fprintf(FILE *stream, const char *format, ...);
    Et finalement, tes arguments se trouvent dans un tableau généralement nommé char **argv dont la première dimension (donc le nombre d'arguments) est donné par une variable généralement appelée argc...

    Et on les obtient en écrivant le main comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    int main(int argc, char **argv)
    {
     printf("Il y a %d arguments passés par la ligne de commande\n",argc);
     return 0;
    }
    Avec tous ces éléments, tu devrais y arriver...
    Jc

  4. #4
    Inactif
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 72
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par fearyourself
    On utilise pour ouvrir un fichier

    FILE *fopen(const char *path, const char *mode);
    Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    FILE *f = fopen("test.txt","w"); //pour ouvrir le fichier test.txt en écriture
    Ensuite, on utilise pour écrire dans un fichier fprintf qui marche comme printf mais tu mets le pointeur de fichier en premier argument.

    int fprintf(FILE *stream, const char *format, ...);
    Et finalement, tes arguments se trouvent dans un tableau généralement nommé char **argv dont la première dimension (donc le nombre d'arguments) est donné par une variable généralement appelée argc...
    Si j'écris plusieurs lignes ,est ce que c'est mieux d'utiliser fgets ou bien de rester avec char**argv

  5. #5
    Membre averti Avatar de Jack_serious
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 350
    Points : 396
    Points
    396
    Par défaut
    Citation Envoyé par Gryzzly
    Si j'écris plusieurs lignes ,est ce que c'est mieux d'utiliser fgets ou bien de rester avec char**argv
    J'ai l'impression qu'il y a confusion.

    argv est un tableau a deux dimensions. Un tableau de chaines en somme. Tu pourrais ecrire le contenu de ce tableau dans un fichier en le parcourant ligne par ligne. Ce tableau depend de la maniere dont a ete appelle ton programme.
    Ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $> ./my_prog oh qu il est beau mon petit programme
    Ton tableau va ressembler a ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    argv[0] = "my_prog"
    argv[1] = "oh"
    argv[2] = "qu"
    argv[3] = "il"
    etc ...
    Donc si ton programme est appele de cette facon, il faut que tu utilises argv: que tu le parcoure et que tu l'ecrive, element par element.
    Ca ressemble a ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    #include <stdio.h>
     
    int		my_strlen(char *str)
    {
      int		size;
     
      size = 0;
      while (str[size] != 0)
        size++;
      return (size);
    }
     
    int		main(int argc, char **argv)
    {
      FILE		*file;
      int		i;
      char		*separator;
     
      separator = "\n";
      file = fopen("my_file", "w");
      for (i = 1; i < argc; i++)
        {
          fwrite(argv[i], sizeof(*(argv[i])), my_strlen(argv[i]), file);
          fwrite(separator, sizeof(*separator), my_strlen(separator), file);
        }
      fclose(file);
      return (0);
    }
    Exemple de fonctionnement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     $> ./my_prog il etait un petit navire  euh il etait un petit navire euh qui n avait ja ja jamais navigue
     
    $> cat my_file           <-- affiche le contenu d'un fichier
     
    il
    etait
    un
    petit
    navire
    euh
    il
    etait
    un
    petit
    navire
    euh
    qui
    n
    avait
    ja
    ja
    jamais
    navigue
    Rien de bien sorcier : on ouvre le fichier, on parcours argv (en commencant par 1 puisque argv[0] est le nom du programme, et en finissant a argc - 1 puisque argc est le nombre d'arguments et que la numerotation d'un tableau commence a 0.

    fgets() sert completement a autre chose :
    C'est un fontion tres gentille qui lit une ligne dans un fichier.
    Une ligne se terminant par un '\n' ou la fin du fichier.

    On peut l'utiliser pour lire sur l'entree standard : le clavier.

    Dans ce cas ton programme possede un tout autre fonctionnement: a chaque fois que l'utilisateur tape une ligne, elle est entree dans le fichier.

    Mais pour en revenir a ta question initiale, fgets() ne te sert a rien en l'occurence.

  6. #6
    Inactif
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 72
    Points : 33
    Points
    33
    Par défaut
    Merci de vos réponses.

    Et pour faire l'inverse;à savoir lire des données à partir d'un fichier,comment faut 'il faire.

  7. #7
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Utiliser fgets, cette fois-ci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    FILE *f = fopen("petit_navire.txt", "r");
    if (f != NULL)
    {
       char buf[256];
       while(fgets-buf, sizeof(buf), f) != NULL)
       {
          // je chante la chanson
       }
       fclose(f);
    }
    pour l'écriture, c'est peut-être un peu compliqué non ?
    Citation Envoyé par Jack_serious
    fwrite(argv[i], sizeof(*(argv[i])), my_strlen(argv[i]), file);
    fwrite(separator, sizeof(*separator), my_strlen(separator), file);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fprintf(file, "%s\n", argv[i]).

  8. #8
    Inactif
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 72
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par Trap D
    Utiliser fgets, cette fois-ci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    FILE *f = fopen("petit_navire.txt", "r");
    if (f != NULL)
    {
       char buf[256];
       while(fgets-buf, sizeof(buf), f) != NULL)
       {
          // je chante la chanson
       }
       fclose(f);
    }
    Merci bien

  9. #9
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Attention, j'ai fait une faute de frappe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while(fgets-buf, sizeof(buf), f) != NULL)
    C'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while(fgets(buf, sizeof(buf), f) != NULL)

  10. #10
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Gryzzly
    Et pour faire l'inverse;à savoir lire des données à partir d'un fichier,comment faut 'il faire.
    Hum, en principe, on ne répond pas aux questions basiques qui ont leurs réponses dans n'importe quel cours ou livre de C. C'est à toi d'apprendre les bases.

    http://www.linux-kheops.com/doc/ansi-c/Introduction_ANSI_C.htm

    Nous, on est plutôt là pour d'éventuelles corrections et des techniques plus ou moins avancées.

  11. #11
    Membre averti Avatar de Jack_serious
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 350
    Points : 396
    Points
    396
    Par défaut
    Citation Envoyé par Trap D
    pour l'écriture, c'est peut-être un peu compliqué non ?
    Citation Envoyé par Jack_serious
    fwrite(argv[i], sizeof(*(argv[i])), my_strlen(argv[i]), file);
    fwrite(separator, sizeof(*separator), my_strlen(separator), file);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fprintf(file, "%s\n", argv[i]).
    Tout a fait exact.

    C'est purement personnel je ne suis pas un habitue des fonctions de lecture/ecriture formatees.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VB.Net] Comment sauvegarder dans un fichier XML ?
    Par totoranky dans le forum VB.NET
    Réponses: 3
    Dernier message: 16/03/2007, 11h32
  2. [VBA E] sauvegarde dans un fichier sur reseau
    Par zoumzoum59 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 12/08/2006, 10h05
  3. [bug aléatoire] sauvegarde dans un fichier
    Par poukill dans le forum C++
    Réponses: 11
    Dernier message: 30/05/2006, 08h36
  4. Réponses: 2
    Dernier message: 16/06/2005, 14h48
  5. [JList] Lecture des données sauvegardées dans un fichier
    Par Myogtha dans le forum Composants
    Réponses: 7
    Dernier message: 10/06/2004, 21h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo