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 :

record from string


Sujet :

Caml

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 147
    Par défaut record from string
    Bonjour,

    je reçois une string par le réseau et j'aimerais le convertir en un type enregistrement. En C, il me semble qu'on aurait fait un cast mais comme il n'y a pas de cast en caml, je ne sais pas comment il faut s'y prendre.

    Faut-il utiliser des librairies ou frameworks particuliers qui mâchent le boulot ? Faut-il manipuler les octets reçus ?

    Je ne sais pas du tout comment m'y prendre et quelques pointeurs seraient les bienvenus.

    Merci bien.

  2. #2
    Membre émérite
    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
    Par défaut
    Bonjour !

    Je reçois une string par le réseau et j'aimerais le convertir en un type enregistrement. En C, il me semble qu'on aurait fait un cast mais comme il n'y a pas de cast en caml, je ne sais pas comment il faut s'y prendre.
    Effectivement, il ne faut surtout pas penser faire en OCaml comme en C. Tu as toutes les chances de ne pas réussir à faire ce que tu veux en procédant de la sorte. Pour t'aider, j'ai besoin d'un peu plus d'infos. Qu'entends-tu par convertir la chaîne en type enregistrement ? Que contient cette chaîne ? À quoi ressemble le type enregistrement dont tu parles ?

    Cordialement,
    Cacophrène

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 147
    Par défaut
    Citation Envoyé par Cacophrene Voir le message
    Bonjour !


    Effectivement, il ne faut surtout pas penser faire en OCaml comme en C. Tu as toutes les chances de ne pas réussir à faire ce que tu veux en procédant de la sorte. Pour t'aider, j'ai besoin d'un peu plus d'infos. Qu'entends-tu par convertir la chaîne en type enregistrement ? Que contient cette chaîne ? À quoi ressemble le type enregistrement dont tu parles ?

    Cordialement,
    Cacophrène
    Bonjour Cacophrène et merci de ta réponse.

    Pour le moment, le type enregistrement n'est pas défini. Je suis à l'étape d'apprentissage avant de me lancer dans un truc énorme.

    L'idée qui sera amenée à évoluer c'est de créer un type message qui soit compréhensible par le client et le serveur afin de se déplacer dans une machine à états côté serveur.

    Par exemple :
    type commande = Nom | Prenom
    type message = { cmd : commande ; buf : string }

    Le client envoie un message de la forme {cmd = Prenom ; buf = "toto"} et le serveur match sur le premier champ cmd et sait ce qu'il doit faire ensuite. C'est basique mais l'idée c'est ça.
    Le champ commande me permettra de savoir exactement ce que voulait le client et du coup, savoir si à cet instant précis dans la machine, cette commande était autorisée.

    J'espère être clair sinon j'essaierai de tourner autrement mes phrases.

    Dest.

  4. #4
    Membre émérite
    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
    Par défaut
    Re !

    Citation Envoyé par dest
    L'idée qui sera amenée à évoluer c'est de créer un type message qui soit compréhensible par le client et le serveur afin de se déplacer dans une machine à états côté serveur.
    Je crois que j'ai compris. Dans ce cas, le dialogue entre le client et le serveur peut être effectué comme ça :

    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
    type commande = Nom | Prenom
    type message = { cmd : commande ; buf : string }
    
    let string_of_command = function
      | Nom -> "Nom"
      | Prenom -> "Prenom"
      | etc. -> (...)
    
    let command_of_string = function
      | "Nom" -> Nom
      | "Prenom" -> Prenom
      | etc. -> (...) 
    
    let send_message msg =
      fonction_envoi begin
        Printf.sprintf "%s %s" (string_of_command msg.cmd) msg.buf
      end
    
    let read_message str =
      Scanf.sscanf str "%s %s" begin fun x y -> 
        { cmd = command_of_string x; msg = y}
      end
    Cela te donne les signatures suivantes, peut-être plus utiles que le code lui-même :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    type commande
    type message
    
    val string_of_command : commande -> string
    val command_of_string : string -> commande
    val send_message : message -> unit (* Client *)
    val read_message : string -> message (* Serveur *)
    Si tu peux travailler avec les entrées/sorties (in_channel/out_channel) plutôt de dialoguer avec des chaînes tu peux peut-être éviter pas mal de travail en regardant du côté de input_value et output_value.

    Cordialement,
    Cacophrène

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 147
    Par défaut
    Tu as effectivement compris où je voulais en venir.

    La solution que tu préconises est une piste à laquelle j'avais pensé. Je vais donc partir sur ça pour le moment à moins que quelqu'un d'autre ait quelque chose d'autre à proposer.

    Je vais aller étudier plus en détail le input_value et output_value.

    Merci

  6. #6
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Par défaut
    et le "type" des données reçus change-t-il en fonction de ce que tu reçois ?
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

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

Discussions similaires

  1. extraire des lettres from string
    Par jalalnet dans le forum VB.NET
    Réponses: 4
    Dernier message: 10/05/2012, 10h21
  2. Réponses: 3
    Dernier message: 04/05/2010, 08h58
  3. Réponses: 2
    Dernier message: 08/12/2009, 12h57
  4. Conversion error from string "15-AUG-2008"
    Par freud dans le forum SQL
    Réponses: 2
    Dernier message: 17/08/2008, 19h24
  5. from string to collection
    Par anasshb dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 01/11/2007, 13h53

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