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 :

[OCAML] ouverture/lecture fichier


Sujet :

Caml

  1. #1
    Expert confirmé Avatar de ManusDei
    Homme Profil pro
    vilain troll de l'UE
    Inscrit en
    Février 2010
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : vilain troll de l'UE

    Informations forums :
    Inscription : Février 2010
    Messages : 1 619
    Points : 4 352
    Points
    4 352
    Par défaut [OCAML] ouverture/lecture fichier
    Bonjour,

    je reprend un projet dans lequel j'ai ce genre de lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    let chan = Unix.out_channel_of_descr (Unix.openfile fName [Unix.O_WRONLY;Unix.O_TRUNC;Unix.O_CREAT] 0o644) in
    sauf que je suis sous windows

    Vers quel module je dois regarder ? Pervasives ? Et est-ce qu'il existe un équivalent au #ifdef __unix et #ifdef __win32 pour OCaml ?

    Merci.

    Edit : out_channel_of_descr est apparemment la seule méthode non portée de mon code.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    832
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 832
    Points : 1 104
    Points
    1 104
    Par défaut
    Le module Unix marche aussi sous Windows, sauf certaines fonctions qui sont documentées dans le manuel:
    documentation pour Unix

    As-tu essayé ton code, et est-ce qu'il pose problème ?

    Et sinon, pourquoi ne pas simplement utiliser open_out_bin et compagnie ?
    documentation pour Pervasives

  3. #3
    Membre émérite
    Avatar de SpiceGuid
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 704
    Points : 2 991
    Points
    2 991
    Par défaut
    Ocaml 3.11.0 sous XP :
    Code OCaml 3.11 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    # #load "Unix.cma";;
    # Unix.out_channel_of_descr;;
    - : Unix.file_descr -> out_channel = <fun>
    La fonction existe sous Windows, alors quel est le problème, elle déclenche une exception ?

  4. #4
    Expert confirmé Avatar de ManusDei
    Homme Profil pro
    vilain troll de l'UE
    Inscrit en
    Février 2010
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : vilain troll de l'UE

    Informations forums :
    Inscription : Février 2010
    Messages : 1 619
    Points : 4 352
    Points
    4 352
    Par défaut
    A la compilation, j'ai le message d'erreur suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    [ 89%] Linking OCaml executable orange
    File "_none_", line 1, characters 0-1:
    Error: Error while linking frontc.cma(Frontc):
    Reference to undefined global `Unix'
    mingw32-make[2]: *** [main/orange] Error 2
    Donc pour l'instant impossible de tester.

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    832
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 832
    Points : 1 104
    Points
    1 104
    Par défaut
    Tu dois avoir un mauvais script de compilation. Tu as bien pensé à ajouter unix.cma ?
    Que donne "ocamlfind ocamlc -package unix -o executable.exe -linkpkg ton_code.ml" ?

  6. #6
    Expert confirmé Avatar de ManusDei
    Homme Profil pro
    vilain troll de l'UE
    Inscrit en
    Février 2010
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : vilain troll de l'UE

    Informations forums :
    Inscription : Février 2010
    Messages : 1 619
    Points : 4 352
    Points
    4 352
    Par défaut
    SpiceGuid : La fonction est indiquée comme pas portée dans la doc OCaml, mais effectivement elle marche.

    Citation Envoyé par gasche Voir le message
    Tu dois avoir un mauvais script de compilation. Tu as bien pensé à ajouter unix.cma ?
    Que donne "ocamlfind ocamlc -package unix -o executable.exe -linkpkg ton_code.ml" ?
    Je génère mon script avec CMake (ocamlfind n'est pas porté sous windows).

    En fait j'ai trouvé, au début je ne linkais pas vers unix.cma, et ensuite je l'ai rajouté, mais pas au bon endroit (je le chargeais trop tard).

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    832
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 832
    Points : 1 104
    Points
    1 104
    Par défaut
    « La fonction est indiquée comme pas portée dans la doc OCaml, mais effectivement elle marche. »

    Attention, si tu utilises Cygwin, tout est porté. Je me demande si ce n'est pas le cas dès que tu utilises mingw. Je ne sais pas exactement ce que désignent les "native Win32 ports", mais je suppose qu'il pourrait s'agir uniquement de la version compilée avec les compilateurs et la libc MS.

  8. #8
    Expert confirmé Avatar de ManusDei
    Homme Profil pro
    vilain troll de l'UE
    Inscrit en
    Février 2010
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : vilain troll de l'UE

    Informations forums :
    Inscription : Février 2010
    Messages : 1 619
    Points : 4 352
    Points
    4 352
    Par défaut
    Je précise que je n'utilise pas cygwin, mais bien la version de minGW native de windows (et cygwin n'est pas installé).

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

Discussions similaires

  1. Ouverture, lecture fichier word
    Par Z4ng3tsu dans le forum C#
    Réponses: 1
    Dernier message: 09/04/2010, 12h52
  2. Ouverture, lecture d''un fichier
    Par kangouroux dans le forum Débuter
    Réponses: 2
    Dernier message: 08/06/2009, 20h14
  3. [Toutes versions] Ouverture/lecture de fichier texte VBA Access
    Par mmmxtina dans le forum VBA Access
    Réponses: 1
    Dernier message: 04/06/2009, 10h55
  4. Réponses: 3
    Dernier message: 12/12/2006, 10h49
  5. ouverture/lecture/ecriture dans un fichier en mode binaire
    Par dirty_boy dans le forum Débuter
    Réponses: 2
    Dernier message: 15/03/2006, 09h38

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