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 :

Comment utiliser Camomile ?


Sujet :

Caml

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 17
    Points : 7
    Points
    7
    Par défaut Comment utiliser Camomile ?
    Bonjour,
    j'ai besoin de manier les caractères et chaînes de caractères Unicode, j'ai donc installé Camomile.
    Le problème est que je ne sais pas comment m'en servir, et lorsque dans l'interpréteur interactif je fais :

    #load "camomile.cma";;

    j'ai :

    Cannot find file camomile.cma.

    comment faire ?
    merci d'avance

  2. #2
    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,

    Il me semble que ce problème n'est pas spécifique à la bibliothèque Camomile : il faut indiquer à ocaml où trouver les bibliothèques. Si elle est installée dans un sous-répertoire intitulé camomile, tu peux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    # #directory "+camomile";;
    # #load "camomile.cma";;
    #
    ou plus simplement : ocaml -I +camomile camomile.cma. De mémoire tu auras aussi besoin de charger bigarray...

    Cordialement,
    Cacophrène

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    Merci, ça fonctionne, mais je ne sais pas du tout comment me servir de Camomile : comment créer une variable de type caractère Unicode, et une chaîne de caractères Unicode ?
    Je n'ai pas trouvé la moindre information là-dessus sur internet, à croire que personne ne s'en sert.

  4. #4
    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
    Re,

    Tu trouveras des infos dans les fichiers de signatures (mli). Regarde aussi les signatures du module CamomileLibrary qui regroupe pour ainsi dire toutes les fonctions de la bibliothèque.

    Cordialement,
    Cacophrène

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    C'est bien ce que j'ai fait, mais ça ne m'apprend rien, je ne comprends toujours pas comment créer une variable de type Unicode.
    J'ai aussi cherché sur le site officiel de camomile mais la documentation est peut-être très bien quand on sait la lire, ça ne doit pas être mon cas, je vois bien qu'il y a des fonctions pour manier les chaînes et tout mais je ne comprends toujours pas comment créer une chaîne unicode.

  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
    Re,

    Citation Envoyé par Lyaskator
    je ne comprends toujours pas comment créer une variable de type Unicode
    En fouillant un peu on trouve le module CamomileLibrary.UTF8. Ce module définit un type t pour les chaînes de caractères unicode encodées en UTF8. Ce type n'est autre qu'un type string, mais on peut vérifier la validité de la chaîne avec la fonction validate. Un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    open CamomileLibrary
    
    let from_string str = 
      try UTF8.validate str; Some str with _ -> None
    Cordialement,
    Cacophrène

  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
    En fait il faudrait savoir ce que tu as besoin de faire, si tu veux des conseils sur comment le faire avec Camomile. Si tu veux juste lire des chaînes UTF8 dans un fichier et les afficher, pas besoin de Camomile, le type "string" de Caml permet déjà ça, il suffit de comprendre que certains caractères utf8 seront stockés en plusieurs octets (et que donc foo.[n] ne renvoie pas ce qu'on pourrait vouloir, ni String.length).

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    En fait il faudrait savoir ce que tu as besoin de faire, si tu veux des conseils sur comment le faire avec Camomile. Si tu veux juste lire des chaînes UTF8 dans un fichier et les afficher, pas besoin de Camomile, le type "string" de Caml permet déjà ça, il suffit de comprendre que certains caractères utf8 seront stockés en plusieurs octets (et que donc foo.[n] ne renvoie pas ce qu'on pourrait vouloir, ni String.length).
    Je ne savais pas, je pensais que j'aurais besoin de Camomile pour ça.
    Donc merci, je mets ce sujet en résolu.

  9. #9
    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,

    Un morceau de code qui peut servir de point de départ pour manipuler les chaînes utf8 en OCaml sans faire appel à une bibliothèque externe :

    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
    type unichar = int
    type unistring = unichar list
    
    let explode str =
      let rec loop res = function
        | 0 -> res
        | i -> let j = i - 1 in loop (str.[j] :: res) j
      in loop [] (String.length str) 
      
    let to_unistring str =
      let rec loop = function
        | [] -> []
        | '\x00'..'\x7f' as a :: t -> get1 a :: loop t
        | '\x0b'..'\xdf' as a :: b :: t -> get2 a b :: loop t
        | '\xe0'..'\xef' as a :: b :: c :: t -> get3 a b c :: loop t
        | '\xf0'..'\xf7' as a :: b :: c :: d :: t -> get4 a b c d :: loop t
        | _ -> invalid_arg "to_unistring"
      in loop (explode str)
    Je laisse volontairement l'écriture des fonctions get1 à get4 en suspens... si tu as compris comment fonctionne le codage utf8 ces quelques fonctions seront très faciles à écrire. Une version qui utiliserait les flots (type Stream.t) serait probablement élégante.

    NB : il faut quand même faire la balance entre le temps consacré à apprivoiser une bibliothèque et le temps passé à maintenir du code dans ce genre...

    Cordialement,
    Cacophrène

  10. #10
    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
    Personnellement, je me méfie. Les normes unicode sont pleines de surprises (normalisation, etc.), alors si je me contente de les passer et renvoyer, je me contente de String, mais dès qu'il y a la moindre manipulation à faire qui dépende directement des caractères, je choisis une bibliothèque spécifique au domaine.

  11. #11
    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 bluestorm
    Personnellement, je me méfie. Les normes unicode sont pleines de surprises (normalisation, etc.), alors si je me contente de les passer et renvoyer, je me contente de String, mais dès qu'il y a la moindre manipulation à faire qui dépende directement des caractères, je choisis une bibliothèque spécifique au domaine.
    C'est exactement ça. Respecter à la lettre toutes les contraintes demande du temps et de la patience, et il n'est pas sûr que ça donne quelque chose de performant au final. Mais quand bien même, il n'est pas sûr non plus qu'on puisse le maintenir ensuite comme il se doit et s'adapter aux changements. Donc quelques questions à se poser :


    • Combien de temps faut-il investir pour maîtriser une bibliothèque dédiée (ici on parle de Camomile mais Glib s'occupe aussi d'unicode) ?
    • Quel est le bénéfice réel d'un code écrit soi-même (moins de dépendances pour le projet, mais en contrepartie plus de code à déboguer/maintenir) ?

    Il reste l'aspect pédagogique (culturel même), mais alors pas dans un projet destiné à la production ou autre...

    Cordialement,
    Cacophrène

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 24/02/2009, 12h06
  2. Comment utiliser un cache ?
    Par TOM-Z dans le forum XMLRAD
    Réponses: 4
    Dernier message: 14/03/2003, 09h55
  3. comment utiliser actionscript ?
    Par webs dans le forum Flash
    Réponses: 3
    Dernier message: 09/02/2003, 23h11
  4. Comment utiliser OUT ?
    Par Bouziane Abderraouf dans le forum CORBA
    Réponses: 3
    Dernier message: 20/07/2002, 09h35
  5. Réponses: 5
    Dernier message: 11/06/2002, 15h21

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