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

Caml Discussion :

Lecture d'un fichier


Sujet :

Caml

  1. #1
    Candidat au Club
    Inscrit en
    Février 2010
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Lecture d'un fichier
    Salut,

    j'ai créé un fichier « test.txt » en utilisant ce code :

    Code Caml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    let oc = open_out "C:/test.txt"  in
    Printf.fprintf oc "%s " "hello world" ; 
    Printf.fprintf oc "%c" '\n'; 
    Printf.fprintf oc "%4.2f" 3.14 ; 
    Printf.fprintf oc "%c" '\n';  
    Printf.fprintf oc "%d " 7 ; 
    Printf.fprintf oc "%c" '\n';  
    close_out oc ;;

    et, après, je voulais le lire en exécutant le code suivant :

    Code Caml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    let ic = open_in "C:/test.txt" in 
    try
    while true do
    let obj = input_value ic 
    done ;
    with _ -> 
    close_in_noerr ic ;;

    et voila le message d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Characters 139-143:
      done ;
      ^^^^
    Syntax error
    Merci.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 128
    Points : 146
    Points
    146
    Par défaut
    la construction c'est "let in" à l'intérieur d'une expression et "let" sans "in" au niveau de la racine du code. ici tu écris "let obj = input_value ic" et donc il manque le "in" à la fin et il manque une expression à la suite où serait utilisé le lien (la variable) créé.

    J'ai modifié ton code d'écriture du fichier, l'espace entre l'entier et la fin de ligne perturbait la fonction int_of_string, j'ai aussi simplifié l'écriture des fin de ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    let () =
      let oc = open_out "/tmp/test.txt" in
      Printf.fprintf oc "%s\n" "hello world";
      Printf.fprintf oc "%4.2f\n" 3.14;
      Printf.fprintf oc "%d\n" 7;
      close_out oc;
    ;;
    Puis tu lis le tous avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    let () =
      let ic = open_in "/tmp/test.txt" in
      let hello_str = input_line ic in
      let my_pi = float_of_string(input_line ic) in
      let my_int = int_of_string(input_line ic) in
      Printf.printf " %s\n %f\n %d\n" hello_str my_pi my_int;
    ;;
    tu remarqueras qu'à chaque lecture d'un élément il faut savoir ce qu'on va lire, si c'est un entier un réel, ou une chaine de caractère.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 128
    Points : 146
    Points
    146
    Par défaut
    à noter aussi que si tu utilises input_value, il faut avoir utilisé output_value pour écrire dans le fichier, et il faut savoir que l'écriture en question ne sera pas de l'ascii mais du binaire, lire la documentation du module Marshal pour plus d'information, de plus un synonyme de Marshal est sérialisation, je te conseille de [ame="http://fr.wikipedia.org/wiki/Sérialisation"]lire ceci[/ame] pour comprendre ce qu'est la sérialisation.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 128
    Points : 146
    Points
    146
    Par défaut
    à noter aussi que si tu utilises input_value, il faut avoir utilisé output_value pour écrire dans le fichier, et il faut savoir que l'écriture en question ne sera pas de l'ascii mais du binaire, lire la documentation du module Marshal pour plus d'information, de plus un synonyme de Marshal est sérialisation, je te conseille de lire ceci : [ame="http://fr.wikipedia.org/wiki/Sérialisation"]sérialisation[/ame] pour comprendre ce qu'est la sérialisation.

  5. #5
    Candidat au Club
    Inscrit en
    Février 2010
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par adtunum Voir le message
    à noter aussi que si tu utilises input_value, il faut avoir utilisé output_value pour écrire dans le fichier, et il faut savoir que l'écriture en question ne sera pas de l'ascii mais du binaire, lire la documentation du module Marshal pour plus d'information, de plus un synonyme de Marshal est sérialisation, je te conseille de lire ceci : sérialisation pour comprendre ce qu'est la sérialisation.

    merci beaucoup pour votre reponse,mais comment faire pour recuperer le contenu d un fichier qui contient un ensemble de lignes de chaines de caractere et suposant qu'on ne connait pas son contenu?
    je pense on sera obligé d utiliser une boucle.

  6. #6
    Membre éprouvé
    Avatar de Cacophrene
    Homme Profil pro
    Biologiste
    Inscrit en
    Janvier 2009
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Biologiste

    Informations forums :
    Inscription : Janvier 2009
    Messages : 535
    Points : 1 125
    Points
    1 125
    Par défaut
    Bonsoir,

    Citation Envoyé par clairdelune
    comment faire pour recuperer le contenu d un fichier qui contient un ensemble de lignes de chaines de caractere et suposant qu'on ne connait pas son contenu?
    Pour récupérer le contenu d'un fichier texte ordinaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    let load file =
      try
        let ich = open_in file in
        let len = in_channel_length ich in
        let buf = Buffer.create len in
        Buffer.add_channel buf ich len;
        close_in ich;
        Some buf
      with _ -> None
    Cordialement,
    Cacophrène

  7. #7
    Candidat au Club
    Inscrit en
    Février 2010
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par Cacophrene Voir le message
    Bonsoir,



    Pour récupérer le contenu d'un fichier texte ordinaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    let load file =
      try
        let ich = open_in file in
        let len = in_channel_length ich in
        let buf = Buffer.create len in
        Buffer.add_channel buf ich len;
        close_in ich;
        Some buf
      with _ -> None
    Cordialement,
    Cacophrène
    Merci beaucoup Cacophrène;

  8. #8
    Membre éprouvé
    Avatar de InOCamlWeTrust
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 036
    Points : 1 284
    Points
    1 284
    Par défaut
    J'ajoute que tes printf ne servent à rien dans ton code. De simples print_endline suffisent amplement. Printf ne sert réellement que lorsque tu manipules des variables dans les arguments. Si tu places des constantes, autant écrire le texte en dûr. Ca sert à ça le printf.
    When Colt produced the first practical repeating handgun, it gave rise to the saying God created men, but Colt made them equal.

Discussions similaires

  1. Lecture d'un fichier .dbf
    Par San Soussy dans le forum Autres SGBD
    Réponses: 8
    Dernier message: 07/07/2004, 16h30
  2. Réponses: 6
    Dernier message: 02/09/2003, 15h12
  3. Lecture et ecriture fichier .ini
    Par despe dans le forum C
    Réponses: 6
    Dernier message: 23/07/2003, 20h40
  4. [langage] Optimiser la lecture d'un fichier
    Par And_the_problem_is dans le forum Langage
    Réponses: 4
    Dernier message: 05/02/2003, 08h54
  5. [langage] Optimiser la lecture d'un fichier
    Par And_the_problem_is dans le forum Langage
    Réponses: 2
    Dernier message: 11/06/2002, 10h24

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