Aller au contenu

Problème de variable string sous LISP


Messages recommandés

Invité CityHunter87
Posté(e)

Bonjour,

 

Mon projet de fin d'année consiste à créer en gros un applicatif pour un SIG.

 

J'utilise autocad MAP 2011 et notamment du LISP pour créer une case de dialogue et donc permettre à l'utilisateur de faire ses propres requêtes sans passer par MAP.

 

Le problème c'est que je n'arrive pas à remplacer "gab_local" par ma variable var1 qui pour moi est bien une châine de caractères; d'ailleurs quand je fais un (princ var1), j'obtiens bien "gab_local".

 

après lancement j'ai ce message d'erreur :

erreur: type de données incorrect ou dépassement de données:

 

---------------------CODE---------------------------

 

(setq df (load_dialog "C:/Users/Julien/Desktop/PROJET SIG/lsp/CASEDIAL_SIG.DCL"))

(new_dialog "DSIG" df)

(start_dialog)

 

(setq var1 "gab_local")

 

;;;SQL

 

(setq ade_cmddia_before_qry (getvar "cmddia"))

(setvar "cmddia" 0)

(ade_qryclear)

(ade_qrysettype "preview")

(ade_qrydefine '("" "" "" "SQL" (var1 "SURFACE > 8 AND DESCRIPTION = 'BUREAU'")""))

(ade_qrysetaltprop nil)

(ade_qryexecute)

(setvar "cmddia" ade_cmddia_before_qry)

 

;;;FIN SQL

 

(unload_dialog df)

 

 

 

Si vous pouviez m'aider, ça serait bien ! Je ne peux plus avancer sur mon projet !!! Merci.

 

Posté(e)

Salut,

c'est assez difficile de te répondre, mais si j'ai bien compris l'erreur doit venir de là :

 

(ade_qrydefine '("" "" "" "SQL" (var1 "SURFACE > 8 AND DESCRIPTION = 'BUREAU'")""))

 

pour assembler plusieurs chaines ensemble, utilise la fonction "strcat".

 

(strcat "toto" " va " "se promener")

= "toto va se promener"

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Invité CityHunter87
Posté(e)

En fait le code SQL est généré automatiquement grâce à un outil de map et à l'origine, ça donne ça :

 

(ade_qrydefine '("" "" "" "SQL" ("gab_local" "SURFACE > 8 AND DESCRIPTION = 'BUREAU'")""))

 

et lorsqu'on lance le code sql, ça marche.

 

Mon problème c'est que je vais recueillir grâce à ma case de dialogue des variables qui contiendrait par exemple "gab_local"; j'aimerai donc dans mon code SQL remplacer les châines de caractères par ces variables afin que l'utilisateur puisse créer ses propres requêtes.

 

Malheureusement lorsque je définis une quelconque variable comme ici

 

(setq var1 = "gab_local") et que je remplace mon "gab_local" par var1 dans mon code SQL, ça ne marche pas.

 

(ade_qrydefine '("" "" "" "SQL" (var1 "SURFACE > 8 AND DESCRIPTION = 'BUREAU'")""))

 

Je ne vois pas où j'ai faux ! j'ai sûrement une grosse erreur quelquepart !

Posté(e)

OK, je penses avoir compris, je n'aie pas map mais ça doit être cela :

Construit ta liste avec la fonction list (enlève apostrophe avant la " (") :

 

(ade_qrydefine ([b]list[/b] "" "" "" "SQL  ([b]list[/b] var1 "SURFACE > 8 AND DESCRIPTION = 'BUREAU'")""))

 

 

 

[Edité le 21/1/2011 par Bred]

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Posté(e)

Salut,

 

en LISP le symbole ' (apostrophe) est un raccourci pour la fonction quote qui empèche l'évaluation de l'argument :

 

(setq a 12 b 16)

 

'(a b) équivaut à (quote (a b)) et retourne (A B) => la liste (et son contenu n'est pas évaluée.

(list a b) retourne (12 16) => les variables ont été évalvuées.

 

Je te propose d'essayer :

 

(ade_qrydefine (list "" "" "" "SQL" (list var1 "SURFACE > 8 AND DESCRIPTION = 'BUREAU'")""))

 

EDIT : Bred a été plus rapide...

 

Voir ce sujet (notamment le chapitre 2.2)

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Invité CityHunter87
Posté(e)

Je vous dois..... Une super fière chandelle messieurs :)

 

ça fait deux jours que je ne m'en sortais pas !! :)

 

Merci beaucoup à tous les deux !!

  • 4 semaines après...
Invité CityHunter87
Posté(e)

Bonsoir !

 

J'ai un nouveau problème, peut être même un peu plus corsé mais toujours du même style,

Vous pourrez sans doute me répondre :

 

Voici la ligne de commande qui me pose problème, je voudrais pouvoir insérer ma variable couleur a la place du "10" par exemple.

 

J'ai essayé d'adapté mon code avec le problème que vous aviez résolu la dernière fois, mais je suis bloqué.

 

CODE ORIGINAL

(ade_altpdefine "Hatch" '(("Pattern" . "SOLID")("Scale" . "1.0")("Rotation" . "0.0")("Color" . "10")("Layer" . "TEMP")))

 

CODE MODIFIE

(ade_altpdefine (list "Hatch") (list "Pattern" "." "SOLID")(list "Scale" "." "1.0")(list "Rotation" "." "0.0")(list "Color" "." couleur)(list "Layer" "." "TEMP"))

 

Le . a t'il quelque chose a voir là dedans ? Dans tous les cas, la seule chose qui m'intéresse est de pouvoir mettre ma variable couleur dans le code original.

 

Si vous pouviez y jeter un coup d'oeil, je vous en serai reconnaissant !

 

Merci.

Posté(e)

Salut,

Pour faire une "paire pointé" en lisp, il faut utiliser la fonction "cons" :

 

(cons "Pattern" "SOLID") -> ("Pattern" . "SOLID")

 

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Invité CityHunter87
Posté(e)

Merci beaucoup :)

 

En effet le problème venait bien de là !

 

Bonne soirée !! :)

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité