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 :

utilisation de JSON - problème tout bête dans le TopLevel


Sujet :

Caml

  1. #1
    Membre régulier
    Inscrit en
    Mai 2005
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 140
    Points : 84
    Points
    84
    Par défaut utilisation de JSON - problème tout bête dans le TopLevel
    Suite à la discussion sur Marschall et autre SExpLib, j'ai retenu JSON qui correspond le mieux à mon besoin :
    -écrire dans un fichier des types un peu complexes
    -types non circulaires
    -données pas gigantesques, donc s'accomodant du format texte
    -et surtout "human readable" et éditables

    J'ai donc téléchargé json-wheel-1.0.4.tar.gz

    1) ce qui fonctionne :

    j'ai testé avec succès dans le TopLevel l'exemple donné :

    Code ocaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    (* Program that builds a JSON object and saves it into a file *)
    open Json_type
     
    let obj = Object [ "x", Int 1;
                       "y", Int 2 ]
    let _ = Json_io.save_json "point.js" obj

    J'ai fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #use "...../json_type.ml"
    après avoir encapsulé le contenu du fichier .ml original dans un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    module Json_type = struct .... end
    ça fonctionne bien...

    2) ce qui coince :

    la suite de l'exemple donné sur le site :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    (* Program that reads a JSON object from a file and converts it
       into a specialized type. 
       Uses file "point.js" created by the previous example. *)
    open Json_type
    open Json_type.Browse
     
    let json_obj = Json_io.load_json "point.js"
    let tbl = make_table (objekt json_obj)
    let x = int (field tbl "x")
    let y = int (field tbl "y")
    let _ = Printf.printf "x = %i\ny = %i\n" x y
    Je n'y arrive pas : en effet, le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #use "...../json_io.ml"
    exige un Json_lexer que je n'ai pas, il est livré dans le .tar.gz en tant que "Json_lexer.mll", je ne connait pas ce type de fichier et je ne sais pas comment l'utiliser dans le TopLevel...

    Quelqu'un peut m'aider ?

  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
    après avoir encapsulé le contenu du fichier .ml original dans un
    Ohlà, c'est quoi ces méthodes barbares ? Tu ne peux pas compiler normalement le fichier ?

    Si tu es sous un système d'exploitation civilisé (GNU/Linux ou un BSD), pourquoi ne pas utiliser tout simplement le Makefile ?

    "Json_lexer.mll", je ne connait pas ce type de fichier et je ne sais pas comment l'utiliser dans le TopLevel...
    C'est un fichier "lex", dont tu peux obtenir un .ml en utilisant "ocamllex" : ocamllex json_lexer.mll produira un fichier json_lexer.ml que tu peux alors compiler/utiliser normalement.

  3. #3
    Membre régulier
    Inscrit en
    Mai 2005
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 140
    Points : 84
    Points
    84
    Par défaut
    Citation Envoyé par bluestorm Voir le message
    Ohlà, c'est quoi ces méthodes barbares ? Tu ne peux pas compiler normalement le fichier ?

    Si tu es sous un système d'exploitation civilisé (GNU/Linux ou un BSD), pourquoi ne pas utiliser tout simplement le Makefile ?
    euh, bein je suis sous WinXP et je migre en ce moment vers Ubuntu mais j'ai encore besoin de WinXP pendant quelques mois ... Il y a une autre méthode pour moi ?

    C'est un fichier "lex", dont tu peux obtenir un .ml en utilisant "ocamllex" : ocamllex json_lexer.mll produira un fichier json_lexer.ml que tu peux alors compiler/utiliser normalement.
    merci je vais tester cela. C'est quoi un fichier lex ?

  4. #4
    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
    Un truc qui décrit un lexer (un machin qui découpe un fichier inconnu en suite de symboles reconnaissables, dans le but par exemple de les parser (~ en extraire une structure) ensuite).

    Tu trouveras plus d'info sur l'utilisation de ocamllex dans DA-OCaml, mais le site est temporairement down.

  5. #5
    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
    Regarde un peu si il n'y a pas un Makefile.nt dans le dossier racine, ou mieux, un README, INSTALL ou un truc dans ce genre-là.

  6. #6
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Installe MSys et Mingw (de toute façon, pour faire du développement mixte Windows-Linux sous Windows, c'est quasi indispensable), tu pourras utiliser les Makefiles.

    --
    Jedaï

  7. #7
    Membre régulier
    Inscrit en
    Mai 2005
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 140
    Points : 84
    Points
    84
    Par défaut
    Citation Envoyé par Jedai Voir le message
    Installe MSys et Mingw (de toute façon, pour faire du développement mixte Windows-Linux sous Windows, c'est quasi indispensable), tu pourras utiliser les Makefiles.
    Mingw : j'ai trouvé dans synaptic (sous Ubuntu) mais MSys semble inconnu au bataillon. ... ?

    IOWT : merci du conseil aussi, j'ai un MakeFile : au risque de passer pour un inculte (que je suis ...) j'en fais quoi ?
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    VERSION = 1.0.4
    export VERSION
     
    RESULT = jsonwheel
    NAME = json-wheel
    ONAME = json_wheel
    SOURCES = \
      json_type.mli json_type.ml \
      json_parser.mli json_parser.mly \
      json_lexer.mll \
      json_io.mli json_io.ml \
      json_compat.ml
     
    PACKS = netstring
     
    STDBIN = $(shell dirname `which ocamlfind`)
    ifndef PREFIX
      PREFIX = $(shell dirname $(STDBIN))
    endif
    export PREFIX
     
    ifndef BINDIR
      BINDIR = $(PREFIX)/bin
    endif
    export BINDIR
     
    BYTERESULT = $(RESULT).cma json_*.cmo
    OPTRESULT = $(RESULT).cmxa $(RESULT).a json_*.cmx json_*.o
     
     
    .PHONY: default all opt install uninstall html archive test
     
    default: bcl ncl jsoncat
     
    all: bcl
    opt: ncl jsoncat
     
     
    install:
    	$(MAKE) META
    	ocamlfind install $(NAME) META json_*.cmi \
    		json_type.mli json_io.mli json_compat.ml \
    		`test -f $(RESULT).cma && echo $(BYTERESULT)` \
    		`test -f $(RESULT).cmxa && echo $(OPTRESULT)`
    	if test -f jsoncat$(EXE); \
    		then install -m 0755 jsoncat$(EXE) $(BINDIR)/ ; \
    		else : ; fi
    uninstall:
    	ocamlfind remove $(NAME)
    	rm -f $(BINDIR)/jsoncat$(EXE)
     
    version.ml: Makefile
    	echo 'let version = "$(VERSION)"' > version.ml
    jsoncat: version.ml jsoncat.ml
    	$(MAKE) ncl
    	ocamlfind ocamlopt -o jsoncat -package $(PACKS) -linkpkg \
    		$(RESULT).cmxa version.ml jsoncat.ml
     
    test: jsoncat
    	./jsoncat -test
    	cmp sample-compact.json sample-compact2.json
    	cmp sample-indented.json sample-indented2.json
    	rm sample-compact.json sample-compact2.json \
    		sample-indented.json sample-indented2.json
    check:
    	@echo "-------------------- Standard mode --------------------"
    	./check.sh
    	@echo "--------------------- Big int mode --------------------"
    	./check.sh -b
    	@echo "Some of the tests are known to produce an ERROR, see README."
     
     
    META: META.template Makefile
    	echo 'name = "$(NAME)"' > META
    	echo 'version = "$(VERSION)"' >> META
    	cat META.template >> META
     
    html:
    	ocamldoc -d html -html json_type.mli json_io.mli json_compat.ml
     
    archive: META html
    		rm -rf /tmp/$(NAME) /tmp/$(NAME)-$(VERSION) && \
    	 	cp -r . /tmp/$(NAME) && \
    		cd /tmp/$(NAME) && \
    			$(MAKE) clean && \
    			rm -f *~ $(NAME)*.tar* && \
    		cd /tmp && cp -r $(NAME) $(NAME)-$(VERSION) && \
    		tar czf $(NAME).tar.gz $(NAME) && \
    		tar cjf $(NAME).tar.bz2 $(NAME) && \
    		tar czf $(NAME)-$(VERSION).tar.gz $(NAME)-$(VERSION) && \
    		tar cjf $(NAME)-$(VERSION).tar.bz2 $(NAME)-$(VERSION)
    	mv /tmp/$(NAME).tar.gz /tmp/$(NAME).tar.bz2 .
    	mv /tmp/$(NAME)-$(VERSION).tar.gz /tmp/$(NAME)-$(VERSION).tar.bz2 .
    	cp $(NAME).tar.gz $(NAME).tar.bz2 $$WWW/
    	cp $(NAME)-$(VERSION).tar.gz $(NAME)-$(VERSION).tar.bz2 $$WWW/
    	cp LICENSE $$WWW/$(NAME)-license.txt
    	echo 'let $(ONAME)_version = "$(VERSION)"' \
    		> $$WWW/$(NAME)-version.ml
    	cp Changes $$WWW/$(NAME)-changes.txt
    	mkdir -p $$WWW/$(NAME)-doc
    	cp html/* $$WWW/$(NAME)-doc
     
     
    TRASH = jsoncat jsoncat.o jsoncat.cm* version.* \
      sample-compact.json sample-compact2.json \
      sample-indented.json sample-indented2.json
     
    OCAMLMAKEFILE = OCamlMakefile
    include $(OCAMLMAKEFILE)

  8. #8
    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 : 40
    Localisation : France

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Points : 18 681
    Points
    18 681
    Par défaut
    inutile de jouer avec mingw sous linux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    make all && make check && make test && make install clean

  9. #9
    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
    Sous GNU/Linux tu peux aussi installer godi et le laisser s'occuper de la plupart du boulot d'installation (mais si tu n'es pas habitué à ton système, tu devrais plutôt commencer par chercher des paquets logiciels correspondant à ce que tu cherches)>

Discussions similaires

  1. (problème tout bête?) Tabulation dans JDialog
    Par Akhan dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 29/05/2007, 14h23
  2. Réponses: 39
    Dernier message: 21/10/2006, 13h53
  3. [MySQL] Php, problème tout bète... :D
    Par Djsarkndp dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 14/04/2006, 18h36
  4. un problème tout bête de scanf !
    Par eizo dans le forum C
    Réponses: 9
    Dernier message: 31/10/2005, 12h29
  5. [FLASH MX]Un problème tout bête !
    Par Kikoah dans le forum Flash
    Réponses: 11
    Dernier message: 02/06/2004, 13h16

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