• Dieses Forum ist die maschinengenerierte Übersetzung von www.cad3d.it/forum1 - der italienischen Design-Community. Einige Begriffe sind nicht korrekt übersetzt.

Risultato macro

  • Ersteller Ersteller lucasugar
  • Erstellt am Erstellt am

lucasugar

Guest
Hallo alle,
Ich habe eine triviale Frage, auf die ich nie eine Antwort gefunden habe.
wenn ich das folgende Makro erstellt habe:

definieren
Ort zu
a 123
eine
Ende

und geben Sie dann aaa Display, das Programm zeigt 123 (wie richtig ist es).

wenn Sie eingeben:

b)
Anzeige b

das Programm zeigt den folgenden Fehler an: [Bleep] das Makro wird nicht definiert

Weiß jemand, wie man erklärt, warum das Makro "b" nicht dem Wert 123 zugeordnet ist (was der Wert von "aaa")?

Danke.
 
Er sagt: "b" kann den Wert "aa" nicht zuordnen, weil das System keine Ahnung hat, was "aaa" ist.
wenn es nicht als lokale Variable erklärt wird (d.h. es existiert nur innerhalb einer Programmbürste, die mit definieren beginnt und stirbt mit end_define) das Programm beim Auffinden eines Strings tut dies:

1) überprüfen, ob es sich um einen internen Befehl (Typ edit_part, smash, inq_env usw.) handelt.
2) überprüfen, ob es sich um ein Makro handelt

auf der alten me10 ich tat dies: Makrodateien exportieren. Ich lese sie alle Makros, die nicht im Binärcode kompiliert sind, d.h. die Makro Editables mit Notebook. und ich lernte, Handbücher zur Hand, um mich zu anpassen und zu programmieren

Eine andere Methode ist es, die Datei mit "customize.m" zu öffnen: der Befehl "imput" sagt, welche Makros geladen werden und wo Fischerei. Lesen Sie sie Sie viel lernen
 
hallo schmerzaz, danke für die Antwort.
Ich habe es nicht gut erklärt. wenn ich das folgende Makro erstellt habe:

definieren
ANHANG
Ende

typing aaa Display, Displays 123.

Typisierung:

lassen b aaa (wobei "aaa" das oben definierte Makro ist)
Anzeige b

immer zeigt 123.

wenn ich das Makro erstellen:

definieren
Ort zu
a 123
eine
Ende

typing aaa Display, Displays 123.

Typisierung:

lassen b aaa (wobei "aaa" das oben definierte zweite Makro ist)

den Fehler anzeigen: Das Makro ist nicht definiert.

es scheint, dass die Funktion lässt, dass in "let b aaa" Konflikt mit der Funktion innerhalb des Makros "aaa" lassen.

in vielen Jahren Ich habe versucht zu verstehen, warum dieses Verhalten in anderen Programmiersprachen nicht auftritt. Wenn dies eine me10 Sprachgrenze ist, werde ich weiterhin Makros entwickeln, die das Problem irgendwie umgehen. Ich wollte nur wissen, ob ich falsch bin oder ob es ein System gibt, über das ich nicht weiß.

Danke. .
 
wenn ich das Makro erstellen:

definieren
Ort zu
a 123
eine
Ende

typing aaa Display, Displays 123.

Typisierung:

lassen b aaa (wobei "aaa" das oben definierte zweite Makro ist)

den Fehler anzeigen: Das Makro ist nicht definiert.

.
Sie müssen nicht hinzufügen

Lokal b
vor
b)

Ich kenne die Programmierumgebung nicht.
 
Hallo Jäger,
auch tun, wie von Ihnen vorgeschlagen, Ich bekomme immer den Fehler: [Bleep] das Makro ist nicht definiert
Dank für den Versuch.
 
aber Bildung

Lokal b

innerhalb eines von

definieren
...
Ende

?

Wenn Sie mir sagen, was Sie tun wollen, kann ich versuchen, Ihnen zu helfen.
 
Im konkreten und im allgemeinen möchte ich Makros erstellen, die die let-Funktion enthalten und deren Ergebnis direkt einem anderen Makro mit einer anderen let-Funktion zugeordnet werden kann. Das ist:

wenn ich das Makro erstellen:

definieren
ANHANG
Ende

und dann vom Befehlszeilentyp aa-Anzeige, das Programm zeigt 123 (was der Wert von "aaa"). und so weit alles funktioniert, wie es muss.

wenn durch Befehlszeilentyp in Folge:

lassen b aaa (wobei "aaa" das oben definierte Makro ist)
Anzeige b

das Programm zeigt immer 123 an (was der Wert von "aa" ist, der "b") zugeordnet ist. Und wieder, hier.

wenn ich das Makro erstellen:

definieren
Ort zu
a 123
eine
Ende

und dann durch Befehlszeilentyp aa Anzeige, das Programm zeigt 123 (was der Wert ist, der "a" im Makro "aa") zugeordnet ist. Alles klar.

Wenn nun durch den Befehlszeilentyp b aaa (wobei "aaa" das oben definierte zweite Makro ist) angezeigt wird, zeigt das Programm den Fehler "Sollte das Makro nicht definiert werden", anstatt "b" den aus dem Makro "aaa" zurückgekehrten Wert 123 zuzuordnen.

Meiner Meinung nach ist dies ein abnormes Verhalten: scheint, dass die Anruferfunktion "let b aaa" in Konflikt mit der Funktion "let to 123" innerhalb des Makros "aaa" geht.

Offensichtlich kann ich das Problem umgehen, indem ich das Makro "aa" und globale Makros ändere:

definieren
le macro_result 123
Ende

dann durch Kommandozeilentyp:


- Ja.

und in "b" habe ich das Ergebnis des Makros "aa". Aber es scheint unprofessionell und unrein. Ich kann in anderen Sprachen programmieren (autocad lisp, gbg lpg, visuelle Basis), und mit diesen Sprachen habe ich noch nie solche Probleme erlebt.

Insbesondere sehen wir nun das folgende Makro, dass innerhalb eines Strings ein Teilstrang mit einem anderen Teilstrang ersetzt:

Rufen Sie uns an

Parameter
Parameter os
Parameter ns

lokal i
Lokale
Ort




Schleifen
le i (pos s2 os)
(i = 0)
(i - 1)) + ns.
(i + (len os)
le s2 (Substr s2 i ((len s2) - i + 1))
Endbenutzer

Le s1 (s1 + s2)

le macro_result s

Ende

wenn durch Befehlszeilentyp:



im makro_result Ich werde den String 'mimmo' haben.

aber wenn ich das Makro so ändere:

Rufen Sie uns an

Parameter
Parameter os
Parameter ns

lokal i
Lokale
Ort




Schleifen
le i (pos s2 os)
(i = 0)
(i - 1)) + ns.
(i + (len os)
le s2 (Substr s2 i ((len s2) - i + 1))
Endbenutzer

Le s1 (s1 + s2)

... Ich möchte den String direkt zurückgeben!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Ende

Eingabe von Befehlszeile:

Anzeige replstr 'pippo' 'p' 'm '

das Programm zeigt 'mimmo'.

Eingabe statt (immer von der Kommandozeile):

lassen b (replstr 'pippo' 'p' 'm')

das Programm zeigt den Fehler an: [Einfügen]

Typisierung:

lassen b replstr 'pippo' 'p' 'm' (umgedreht ohne Klammern)
Anzeige b

das Programm zeigt: 'pippo '

Ich möchte, dass Sie eingeben:

lassen b (replstr 'pippo' 'p' 'm')

das Makro "b" enthielt den String 'mimmo'.


Ich hoffe, ich habe es erklärt. .
 
Verdammt!

Ich bin aufrichtig: sein me10 Programmierwissen ist mir sicher überlegen.

Ich kam auch über String Manipulation Probleme, vor allem hatte ich dieses Problem:
einen Satz, um alle unter Teilen zu speichern, indem sie in dwg-Dateien exportieren. Also, wenn ich ein Set mit 100 Teilen habe, musste ich 100 dwg Dateien bekommen, eine für jeden Teil.

das erste Problem war, dass, wenn es mehr Teile mit dem gleichen Namen
Der Befehl

dwg name_part of_old file_name

fehlgeschlagen. Ich löste es durch die Zuordnung einer einzigen progressiven Nummer zu "Angriff" auf den Namen des Teils, um zu einer Liste Teile ohne Doppelnamen zu erhalten

das zweite Problem ist, wenn ein Teil einen Namen des Typs "pippo |material" hat

denn mit Trimm kann ich das Zeichen löschen " (schwarze Schläge), aber ich weiß nicht, wie man das Zeichen "|" löschen kann

Und das habe ich nicht repariert.

denn jetzt bin ich dazu gekommen:

definiert mich
Lokal x
Lokale Zählung
Lokaler Teil
lokale list_parts
lokale Datei_name
Pb_ltab_update
le list_parti 'pbt_ltab '
x 1
lassen.
Schleifen
(x+1)
zählen lassen (conta+1)
(x>(ltab_rows list_parti))
Teilen lassen (read_ltab list_parts x 2)
edit_part
inq
Datei_name (inq 301)
file_name (str file_name+"_"+str zählt)
Umname_part file_name
inq
Datei_name (inq 301)
dwg file_name del_old file_name
Endbenutzer
Ende
Ende
let message ("exportiert")
Anzeige der Anzeige
Ende

Jedoch zurück zu seinem Problem: Ich werde versuchen, es zu betrachten. scheint ein Konflikt zwischen lokalen Variablen
und global.

Aber ich wiederhole, sie ist definitiv erfahrener als ich.
 
Seltsam fand ich das Problem heraus.

Ich habe das Makro repariert, um die Dwg-Teile zu retten, die ich in meinen letzten Beitrag gesetzt habe.

dann lädt me10 die Makrodatei hoch

mi2dwg.m (innerhalb des Makro mi2dwg)

dann machte ich ein Makro (xmi2dwg) mit den gleichen Variablen, gleiches Programm, Ich habe nur einige Anweisungen hinzugefügt und alles in der Datei gespeichert

xmi2dwg.m

me10 berechnet beide:

...
Eingabe 'd:\data_me\macro\cambia_colore.m '
Eingabe 'd:\data_me\macro\mi2dwg.m '
Eingabe 'd:\data_me\macro\xmi2dwg.m '
...

(aus Datei anpassen.m)

Ich habe es getestet, alles in Ordnung. dann hob ich das alte Makro, nur für Neugier, Makro, die immer arbeitete und überrascht..

"Einschlafen der Makroliste_Teile ist nicht definiert"

Beachten Sie, dass list_parti die erste Variable ist, die sowohl im mi2dwg-Makro als auch in xmi2dwg definiert ist.

das Problem scheint: Wenn Sie eine Variable mit let neu definieren, und diese Variable erscheint in zwei verschiedenen Makros oder zwei verschiedenen Blöcke definieren end_define me10 nicht mehr erkennt es.

Sie können eine Variable mit le nur innerhalb des gleichen Makros neu definieren.

Ich weiß nicht, ob ich es erklärt habe, um es mit Worten zu erklären, ist ein bisschen ein Chaos.
 
Zunächst einmal, wenn wir uns ein paar geben, fühlen Sie sich wohler.

Ich habe vielleicht missverstanden, aber nur um zu versuchen, habe ich folgende Makros erstellt:

definiert mich
lokale list_parts
le list_parti 'pbt_ltab '
Anzeigeliste_Teile
Ende

definiert xmi2dwg
lokale list_parts
le list_parti 'pbt_ltab '
Anzeigeliste_Teile
Ende

Sie beide zu werfen gibt mir keinen Fehler. Bist du sicher, dass du nichts weggelassen hast? oder vielleicht verwenden wir verschiedene Versionen von me10. Ich benutze die Veröffentlichung 17.0. selbst wenn es absurd wäre, wenn es keine lokalen Variablen mit dem gleichen Namen in verschiedenen Makros geben könnte.

mit inq_part -> (inq 302) erhalten Sie einen einzigartigen Namen des Teils in ~1, ~2, etc., wenn es Ihnen dienen kann.

zum Löschen des "|"-Zeichens können Sie das Makro-Replstr verwenden, das ich früher veröffentlicht habe, indem Sie Ihr Makro auf diese Weise ändern:

...
edit_part
inq
replstr (inq 301) "|"
Datei_name macro_result
...

zurück zu meinem ersten Problem, das Ideal wäre zu schreiben:

...
edit_part
inq
Datei_name (replstr (inq 301) "|")
...

aber es ist genau das, was das Programm nicht zu akzeptieren scheint (in anderen Programmiersprachen wäre es ganz normal).

eine Neugierde: In Ihrem Makro mi2dwg bemerkte ich den Befehl/Funktion pb_ltab_update. in der Anleitung ist nicht dokumentiert. Kannst du mir sagen, wofür es ist?
 
ciao, l'ho trovata documentata qui:
http://me10macro.awardspace.com/tipstricks.htmlinsbesondere:

Sie möchten die Funktion pb_ltab_update nutzen, um sicherzustellen, dass die Teilstruktur der Zeichnung in den ltab "pbt_ltab" aktualisiert wird

"Sie sollten die pb_ltab_update Funktion verwenden, um sicherzustellen, dass die in der pbt_ltab Tabelle enthaltenen Strukturteile aktualisiert werden"

Bildung wäre in meinem Makro nicht notwendig, aber es kann passieren, Makros zu schreiben, wo die Teileliste irgendwo manipuliert wird und Sie wollen me10 zwingen, es zu aktualisieren, falls spätere Manipulationen der Teileliste notwendig sind.

Ich habe leider keine Lösungen für Ihr Problem: In der Tat war der Fehler, den ich gefunden habe, nicht mit der Verwendung von Variablen mit dem gleichen Namen in verschiedenen Makros verbunden.

Werfen Sie einen Blick auf den Link, den ich gesetzt habe, könnte es hilfreich sein.


Ich habe keine Ahnung, ob es ein gültiger Befehl für spätere Versionen ist.
 

Statistik des Forums

Themen
58.521
Beiträge
499.056
Mitglieder
104.110
Neuestes Mitglied
ChristianR

Zurzeit aktive Besucher

Keine Mitglieder online.
Zurück
Oben