• Ce forum est la traduction générée par la machine de www.cad3d.it/forum1 - la communauté italienne du design. Plusieurs termes ne sont pas traduits correctement.

Risultato macro

  • Auteur du sujet Auteur du sujet lucasugar
  • Date de début Date de début

lucasugar

Guest
Bonjour tout le monde,
J'ai une question insignifiante à laquelle je n'ai jamais trouvé de réponse.
si je crée la macro suivante:

définir une
local à
a 123
a
fin

puis tapez aaa display, le programme affiche 123 (comme c'est le cas).

si vous tapez:

b
affichage b

le programme affiche l'erreur suivante : [Bleep] la macro n'est pas définie

Est-ce que quelqu'un sait expliquer pourquoi la macro "b" n'a pas la valeur 123 (qui est la valeur de "aaa") ?

Je vous remercie.
 
Il dit : "b" ne peut pas attribuer la valeur "aaa" parce que le système n'a aucune idée de ce qu'est "aaa".
s'il n'est pas déclaré comme variable locale (c'est-à-dire qu'il n'existe qu'à l'intérieur d'un pinceau de programme qui commence par définir et qui meurt avec end_define), le programme en trouvant une chaîne fait ceci:

1) vérifier s'il s'agit d'une commande interne (type edit_part, shash, inq_env etc.)
2) vérifier si c'est une macro

sur l'ancien me10 je l'ai fait: les fichiers macro export. Je les lis toutes les macros non compilées en code binaire, c'est-à-dire les macro-éditables avec bloc-notes. et j'ai appris, manuels à portée de main, à me personnaliser et à me programmer10

une autre méthode est d'ouvrir le fichier avec "customize.m": la commande "imput" indique quelles macros sont chargées et où la pêche. les lire vous apprenez beaucoup
 
Bonjour painaz, merci pour la réponse.
Je n'ai pas bien expliqué. si je crée la macro suivante:

définir une
123
fin

taping aaa affichage, affiche 123.

dactylographie:

b aaa (où "aaa" est la macro définie ci-dessus)
affichage b

affiche toujours 123.

si je crée la macro:

définir une
local à
a 123
a
fin

taping aaa affichage, affiche 123.

dactylographie:

b aaa (où "aaa" est la deuxième macro définie ci-dessus)

afficher l'erreur & #160;: La macro n'est pas définie.

il semble que la fonction laisse que dans "let b aaa" conflit avec la fonction laisser dans la macro "aaa".

dans de nombreuses années J'ai essayé de comprendre pourquoi de ce comportement que dans d'autres langages de programmation ne se produit pas. Si c'est une limite de langue me10, je vais continuer à développer des macros qui contournent le problème. Je voulais juste savoir si j'avais tort ou s'il y avait un système que je ne connais pas.

Je vous remercie. .
 
si je crée la macro:

définir une
local à
a 123
a
fin

taping aaa affichage, affiche 123.

dactylographie:

b aaa (où "aaa" est la deuxième macro définie ci-dessus)

afficher l'erreur & #160;: La macro n'est pas définie.

.
Vous n'avez pas à ajouter

local b
avant
b

Je ne connais pas l'environnement de programmation.
 
Bonjour chasseur,
aussi en faisant comme vous l'avez suggéré, je reçois toujours l'erreur: [Bleep] la macro n'est pas définie
Merci quand même pour cette tentative.
 
mais éducation

local b

est dans un bloc de programme délimité par

définir
....
fin

?

Si tu me dis ce que tu veux, je peux essayer de t'aider.
 
Concrètement et en général, je voudrais créer des macros qui contiennent la fonction let et dont le résultat peut être directement affecté à une autre macro avec une autre fonction let. c'est-à-dire:

si je crée la macro:

définir une
123
fin

et puis à partir de la ligne de commande tape aa display, le programme affiche 123 (qui est la valeur de "aaa"). Et jusqu'à présent tout fonctionne comme il faut.

si par type de ligne de commande en séquence:

b aaa (où "aaa" est la macro définie ci-dessus)
affichage b

le programme affiche toujours 123 (qui est la valeur de "aaa" attribuée à "b"). Et encore une fois, très bien ici.

si je crée la macro:

définir une
local à
a 123
a
fin

puis par type de ligne de commande aa, le programme affiche 123 (la valeur attribuée à "a" dans la macro "aaa"). Très bien.

Maintenant, si par type de ligne de commande let b aaa (où "aaa" est la deuxième macro définie ci-dessus), le programme affiche l'erreur "Bien que la macro ne soit pas définie", au lieu d'attribuer à "b" la valeur 123 retournée de la macro "aaa".

à mon avis il s'agit d'un comportement anormal: semble que la fonction appelante "let b aaa" entre en conflit avec la fonction "let to 123" dans la macro "aaa".

Je peux évidemment contourner le problème en modifiant la macro "aaa" et en utilisant des macros globales:

définir une
le macro_résultat 123
fin

puis par type de ligne de commande :


_

et dans "b" j'ai le résultat de la macro "aaa". Mais cela semble non professionnel et impur. Je peux programmer dans d'autres langues (autocad lisp, gbg lpg, base visuelle), et avec ces langues je n'ai jamais connu de tels problèmes.

Maintenant, en particulier, nous voyons la macro suivante qui à l'intérieur d'une chaîne remplace un sous-trande par un autre sous-trande:

appel replstr

paramètre
paramètre os
paramètre ns

local i
locaux
locaux




boucle
le i (pos s 2 os)
sortie_si (i = 0)
(i - 1)) + ns)
(i + (en)
le s2 (sous-str s2 i ((len s2) - i + 1))
end_loop

le s1 (s1 + s2)

le macro_résultats s

fin

si par type de ligne de commande:



dans le_résultat macro J'aurai la corde 'mimmo'.

Mais si je change la macro comme ça :

appel replstr

paramètre
paramètre os
paramètre ns

local i
locaux
locaux




boucle
le i (pos s 2 os)
sortie_si (i = 0)
(i - 1)) + ns)
(i + (en)
le s2 (sous-str s2 i ((len s2) - i + 1))
end_loop

le s1 (s1 + s2)

s1 { <----------------- Je veux retourner la corde directement!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ?

fin

typage depuis la ligne de commande & #160;:

afficher le replstr 'pippo' 'p' 'm '

le programme affiche 'mimmo'.

saisie à la place (toujours depuis la ligne de commande):

(replstr 'pippo' 'p' 'm')

le programme affiche l'erreur : [Essayez l'entrée]

dactylographie:

laisser b replstr 'pippo' 'p' 'm' (retourné sans parenthèses)
affichage b

le programme affiche : 'pippo '

Je voudrais que vous tapiez:

(replstr 'pippo' 'p' 'm')

la macro "b" contenait la chaîne "mimmo".


J'espère l'avoir expliqué. . . .
 
Qu'est-ce que tu racontes ?

Je suis sincère : ses connaissances en programmation me10 sont certainement supérieures aux miennes.

J'ai aussi rencontré des problèmes de manipulation de cordes, surtout j'ai eu ce problème:
donné un jeu pour enregistrer toutes les parties sous en les exportant dans des fichiers dwg. Donc si j'ai un jeu avec 100 parties, j'ai dû obtenir 100 fichiers dwg, un pour chaque partie.

le premier problème était que s'il y a plus de parties avec le même nom
la commande

stocker dwg name_part of_old file_name

échoué. Je l'ai résolu en attribuant un seul numéro progressif à "attach" au nom de la partie pour accéder à une liste de parties sans double nom

le deuxième problème est quand une partie a un nom du type "pippo-matériel"

parce qu'avec la taille je peux supprimer le caractère " (pierres noires), mais je ne sais pas comment supprimer le caractère ".

Et je n'ai pas réparé ça.

pour l'instant je suis venu à ceci:

me définit
local x
Nombre local
partie locale
list_partes locales
nom_fichier local
pb_ltab_update
list_parti 'pbt_ltab '
x 1
laisser 0
boucle
(x+1)
Laisser compter (conta+1)
Exit_if (x>(ltab_rows list_parti))
laisser la partie (read_ltab list_parts x 2)
éditer _partie
indice
_nom du fichier (inq 301)
nom_fichier (nom_fichier+"_"+chiffre)
nom_de_fichier_partie
indice
_nom du fichier (inq 301)
stocker dwg fichier_name del_old fichier_name
end_loop
fin
fin
le message ("exporté vers l'exportation")
afficher le message
fin

Cependant, revenir à son problème: Je vais essayer d'y jeter un oeil. semble un conflit entre les variables locales
et mondial.

Mais je répète, elle est certainement plus expérimentée que moi.
 
Étrangement, j'ai peut-être trouvé le problème.

Je réparais la macro pour sauver les pièces que j'ai mises dans mon dernier post.

puis me10 télécharge le fichier macro

mi2dwg.m (avec dans la macro mi2dwg)

puis j'ai fait une macro (xmi2dwg) en utilisant les mêmes variables, le même programme, j'ai juste ajouté quelques instructions et tout enregistré dans le fichier

xxmi2dwg.m

me10 charge les deux:

....
entrée 'd:\data_me\macro\cambia_colore.m '
entrée 'd:\data_me\macro\mi2dwg.m '
entrée 'd:\data_me\macro\xmi2dwg.m '
....

(à partir du fichier personnalized.m)

Je l'ai testé, tout va bien. puis j'ai soulevé l'ancienne macro, juste pour la curiosité, macro qui a toujours fonctionné et surpris..

"Passer la macro list_parts n'est pas défini"

Notez que list_parti est la première variable définie avec la commande let à la fois dans la macro mi2dwg et dans xmi2dwg

le problème semble être ceci: si vous redéfinissez une variable avec let, et cette variable apparaît dans deux macros distinctes ou deux blocs distincts définir end_define me10 ne la reconnaît plus.

vous pouvez redéfinir une variable avec le seulement dans la même macro.

Je ne sais pas si j'ai expliqué... l'expliquer en mots est un peu un désordre.
 
Tout d'abord, si nous nous donnons certains, vous vous sentez plus à l'aise.

J'ai peut-être mal compris, mais pour essayer, j'ai créé les macros suivantes:

me définit
list_partes locales
list_parti 'pbt_ltab '
Afficher les parties de la liste
fin

définit xmi2dwg
list_partes locales
list_parti 'pbt_ltab '
Afficher les parties de la liste
fin

Je ne me trompe pas. Tu es sûre de n'avoir rien oublié ? Ou peut-être que nous utilisons différentes versions de moi10. J'utilise la version 17.0. même s'il serait absurde qu'il n'existe pas de variables locales du même nom dans des macros distinctes.

avec inq_part -> (inq 302) vous obtenez un nom unique de la partie dans ~1, ~2, etc., si elle peut vous servir.

pour la suppression du caractère « Ohio », vous pouvez utiliser la macro replstr que j'ai postée plus tôt, changeant ainsi votre macro :

...
éditer _partie
indice
(dans la case 301)
_nom de fichier macro_résultat
...

retour à mon problème initial, l'idéal serait de pouvoir écrire:

...
éditer _partie
indice
let file_name (replstr (inq 301) « Ohio »»)
...

mais c'est précisément ce que le programme ne semble pas accepter (alors que dans d'autres langages de programmation il serait tout à fait normal).

une curiosité : dans votre macro mi2dwg J'ai remarqué que la commande/fonction pb_ltab_update. dans le guide n'est pas documentée. Pouvez-vous me dire pourquoi ?
 
Ciao, l'ho trovata documentata qui:
http://me10macro.awardspace.com/tipstricks.htmlen particulier:

vous pouvez utiliser la fonction pb_ltab_update pour vous assurer que la structure de la partie du dessin est mise à jour dans le ltab "pbt_ltab"

"vous devriez utiliser la fonction pb_ltab_update pour s'assurer que les parties de structure contenues dans la table pbt_ltab sont mises à jour"

l'éducation ne serait pas nécessaire dans ma macro, mais il peut arriver d'écrire des macros où la liste des pièces est manipulée quelque part et vous voulez me forcer10 à la mettre à jour au cas où des manipulations ultérieures de la liste des pièces seraient nécessaires.

en ce qui concerne votre problème, je n'ai malheureusement aucune solution à proposer: En fait, l'erreur que j'ai trouvée n'était pas liée à l'utilisation de variables du même nom dans différentes macros.

Regardez le lien que j'ai mis, ça pourrait vous être utile.


Je ne sais pas si c'est une commande valide pour les versions ultérieures.
 

Statistiques du forum

Sujets
58 521
Messages
499 056
Membres
104 110
Dernier membre
ChristianR

Membres en ligne

Aucun membre en ligne actuellement.
Retour
Haut