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 :

Accéder à des fichiers externes en OCAML


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 350
    Points
    4 350
    Par défaut Accéder à des fichiers externes en OCAML
    Bonjour,

    dans le cadre de mon stage, je réfléchis à l'utilisation de OCAML pour tout ce qui pourra ressembler à du code (mon tuteur semble aimer l'OCAML ^^).

    J'ai un peu du mal à utiliser le manuel sur le site de CAML
    (C'est là et il n'y a rien d'autres non ?)

    Donc Au secours !

    Ma question est la suivante.
    Je vais probablement devoir développer un programme utilisant des bibliothèques externes, qui seront définies par les utilisateurs en fonction de leurs besoins (bref ils vont en rajouter plein longtemps après la fin de mon stage). Donc est-il possible de lister les fichiers d'un répertoire (ls ou dir), que le programme chargerait dynamiquement à chaque exécution ? Et si oui, c'est dans quel module ?
    http://www.traducteur-sms.com/ On ne sait jamais quand il va servir, donc il faut toujours le garder sous la main

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 47
    Points : 39
    Points
    39
    Par défaut
    Bonjour,

    je ne suis pas sûr d'avoir pleinement saisi ce que tu souhaites faire, mais voilà au moins une partie de la réponse :

    Pour lister des fichiers et faire tout les manipulations dessus (ecrire, lire ...) tu peux utiliser le module Unix.
    http://caml.inria.fr/pub/docs/manual...manual035.html

    Envoyé par : ManusDei
    que le programme chargerait dynamiquement à chaque exécution ?
    c'est cette partie là que je ne comprends pas.

  3. #3
    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 350
    Points
    4 350
    Par défaut
    En fait les bibliothèques sont codées par l'utilisateur, et il doit rajouter les bibliothèques au programme.

    Pour simplifier ça, je pense faire un dossier "bibliothèque", et donc à chaque lancement du programme, il va falloir que le programme liste les fichiers dans le dossier bibliothèque, pour que l'utilisateur choisisse celle qu'il veut utiliser.

    Merci pour la réponse, je vais regarder en détail
    http://www.traducteur-sms.com/ On ne sait jamais quand il va servir, donc il faut toujours le garder sous la main

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 47
    Points : 39
    Points
    39
    Par défaut
    Bonjour,

    Désolé je crois que je n'ai toujours pas compris ! Si le programme doit faire des opérations sur les fichiers, alors le module Unix est ton ami.

    Ce que j'ai cru comprendre :
    - les utilisateurs codent des librairies qui seront utilisées par ton programme.
    -> ce sera donc des modules appelés dans ton programme par Module.maFonction
    - tu veux lister ces modules ? -> ok mais pour en faire quoi ? il faudra les charger explicitement dans ton programme.

    Donc l'utilisateur qui code sa librairie, rajoute dans ton programme son module, et rajoute aussi dans ton programme les fonctions qu'il veut utiliser... en gros un projet développé par plusieurs personne ?

    Si j'ai compris de travers, désolé ^^

  5. #5
    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
    Bonjour !

    Pour lister le contenu d'un répertoire : Sys.readdir. Pour charger dynamiquement des modules OCaml dans une application elle-même écrite en OCaml, voir le module Dynlink, accessible en bytecode et en natif sur certaines plateformes. Un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    (* Renvoie toutes les bibliothèques disponibles. *)
    let get_available_libraires () = 
      Array.to_list (Sys.readdir "my-application/my-ocamllib")
    
    (* Charge la liste des bibliothèques sélectionnées. *)
    let load_libraries = List.iter Dynlink.loadfile
    Cordialement,
    Cacophrène

  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 350
    Points
    4 350
    Par défaut
    Va falloir que je détaille plus en fait, je me rend compte que je suis pas très clair.

    Sur le projet, j'ai un certain nombre de chercheurs qui vont vouloir créer des bases de données et y accéder, mais ils n'utilisent pas tous les mêmes langages de programmation (et il ont pas envie d'en apprendre de nouveaux).
    Pour cela, ils créent une feuille de style, qui décrit la base de données, et pouf, on génère le code, et des fonctions pour accéder aux données (le tout sera en réseau, j'ai une gestion des droits à faire).

    Il s'agit donc d'un programme d'aide à la création de bases de données, qui à partir d'un modèle de donnée abstrait, doit générer un code dans un langage au choix, ainsi que différents accesseurs, et des fonctions sur les données.

    Bref, pour en revenir à ma question, il vont devoir décrire leur modèle de données dans un langage particulier (proche du XML), ensuite je passe ça dans un parser OCAML, qui ressort le code dans le langage choisit (Java, XML, OCAML, etc...).

    Chaque modèle de données, représenté par un fichier, doit être réutilisable à loisir
    Donc il faut que je puisse proposer à l'utilisateur de choisir un modèle de données parmi les fichiers présents (chaque modèle est dans un fichier différent).

    Donc ma question est :
    Y a t'il une bibliothèque OCAML permettant de lister les fichiers d'un repertoire (renvoyant je suppose un résultat sous forme de liste), et une bibliothèque permettant de lire des fichiers (il me semble que Dynlink ne fonctionne qu'avec des fichiers .cma ou .cmi).

    PS : Merci, ça répond vite et clair ici ^^
    http://www.traducteur-sms.com/ On ne sait jamais quand il va servir, donc il faut toujours le garder sous la main

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 47
    Points : 39
    Points
    39
    Par défaut
    Bonjour,

    Une fois n'est pas coutume, ce ne sera pas Cacophrene qui le dira mais "il faut lire le manuel" (même si tu as dit que tu ne comprenais pas comment il marche).

    Envoyé par ManusDei
    Donc ma question est :
    Y a t'il une bibliothèque OCAML permettant de lister les fichiers d'un repertoire (renvoyant je suppose un résultat sous forme de liste),
    Envoyé par Cacophrene
    Pour lister le contenu d'un répertoire : Sys.readdir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (* Renvoie toutes les bibliothèques disponibles. *)
    let get_available_libraires () = 
      Array.to_list (Sys.readdir "my-application/my-ocamllib")
    Le manuel OCAML:
    val readdir : string -> string array

    Return the names of all files present in the given directory. Names denoting the current directory and the parent directory ("." and ".." in Unix) are not returned. Each string in the result is a file name rather than a complete path. There is no guarantee that the name strings in the resulting array will appear in any specific order; they are not, in particular, guaranteed to appear in alphabetical order.
    Envoyé par ManusDei
    et une bibliothèque permettant de lire des fichiers
    module Unix du manuel: par exemple
    val read : file_descr -> string -> int -> int -> int

    read fd buff ofs len reads len characters from descriptor fd, storing them in string buff, starting at position ofs in string buff. Return the number of characters actually read.
    et les classiques open_in; input_line ... du module Pervasives :
    http://caml.inria.fr/pub/docs/manual...ervasives.html

  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 350
    Points
    4 350
    Par défaut
    C'est exactement ce que je cherchais.

    C'est pas que je comprend pas comment il marche, c'est que je ne voyais pas trop comment trouver le module dont j'avais besoin (je suppose que ça viendra à l'usage) ^^

    Mais là j'ai modules et fonctions, donc c'est niquel.

    Merci encore.
    http://www.traducteur-sms.com/ On ne sait jamais quand il va servir, donc il faut toujours le garder sous la main

  9. #9
    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
    Bon, je ne veux pas casser l'ambiance, mais vu tes compétences en Caml et étant donné le projet auquel tu t'attaques, j'ai bien peur que tu ne rames plus qu'autre chose pendant ton stage.

    Si je comprends bien ton problème...

    Il s'agit donc d'un programme d'aide à la création de bases de données, qui à partir d'un modèle de donnée abstrait, doit générer un code dans un langage au choix, ainsi que différents accesseurs, et des fonctions sur les données.

    Bref, pour en revenir à ma question, il vont devoir décrire leur modèle de données dans un langage particulier (proche du XML), ensuite je passe ça dans un parser OCAML, qui ressort le code dans le langage choisit (Java, XML, OCAML, etc...).

    Chaque modèle de données, représenté par un fichier, doit être réutilisable à loisir
    Donc il faut que je puisse proposer à l'utilisateur de choisir un modèle de données parmi les fichiers présents (chaque modèle est dans un fichier différent).
    ... tu n'as aucunement besoin de charger des librairies dynamiques. Le but de ton programme est de convertir un langage précis en un deuxième langage arbitraire selon des règles inscrites dans des fichiers. C'est à ton programme de faire le boulot ! non au mec qui écrit le fichier décrivant la transformation à effectuer !

    En ce qui concerne la recherche des fichiers dans des dossiers, je te conseille vivement d'utiliser le module Sys, qui a le gros avantage d'être 100% portable. Unix n'est réellement portable qu'à 60%, et je ne parle pas seulement en termes de nombre de fonctions. Tu as la fonction Sys.readdir. Toute la doc ici...

    http://caml.inria.fr/pub/docs/manual...ibref/Sys.html

    Bon courage, car tu en auras besoin !
    When Colt produced the first practical repeating handgun, it gave rise to the saying God created men, but Colt made them equal.

  10. #10
    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 350
    Points
    4 350
    Par défaut
    Par dynamique, je voulais dire principalement que le programme fait un "ls" dans le dossier des modèles à chaque lancement.

    Il n'est pas question de modifier les classes pendant l'utilisation du programme (j'ai effectivement pas été clair du tout, j'essayerais de faire plus attention).
    http://www.traducteur-sms.com/ On ne sait jamais quand il va servir, donc il faut toujours le garder sous la main

  11. #11
    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
    Citation Envoyé par ManusDei Voir le message
    Par dynamique, je voulais dire principalement que le programme fait un "ls" dans le dossier des modèles à chaque lancement.
    Sys.readdir
    When Colt produced the first practical repeating handgun, it gave rise to the saying God created men, but Colt made them equal.

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

Discussions similaires

  1. Accéder à des fichiers externes dans une appli J2EE
    Par endbegins dans le forum Développement Web en Java
    Réponses: 8
    Dernier message: 31/03/2011, 14h01
  2. Accéder à des fichiers externes (PDF, doc) dans une application J2EE
    Par JCF81 dans le forum Développement Web en Java
    Réponses: 2
    Dernier message: 11/03/2009, 16h09
  3. Accéder à des fichiers locaux
    Par gerrard dans le forum ASP
    Réponses: 2
    Dernier message: 01/06/2006, 18h14
  4. [Strategie] Accéder à des fichiers sur un serveur
    Par elan dans le forum Général Java
    Réponses: 4
    Dernier message: 28/09/2005, 18h30
  5. accéder à des fichiers mysql
    Par totolala dans le forum Bases de données
    Réponses: 4
    Dernier message: 29/08/2005, 21h51

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