Konstanten ausführen

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
stevie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 417
Registriert: Mo, 17. Sep 2007 18:20
Wohnort: Senftenberg
Kontaktdaten:

Konstanten ausführen

Beitrag von stevie »

Ich lese mit aFileReadEx (ist ne Xclass-Funktion), die Dateien in ein Array einliest) eine Datei ein. Dort steht nun eine Konstante drin.
Im Programm Konstante C_CR.
Nach dem Einlesen bekomme ich "C_CR" in einer Variable.
Jetzt hatte ich versucht mit & die Konstante auszuwerten, dann kam der Fehler unbekannte Variable, obwohl die Konstante einwandfrei definiert ist.
In der Konstante kann Text stehen, aber auch Chr(nAscii).
Am Ende will ich dann eben "Text"+ausgewertete Konstante zusammenfügen.
Bsp: #define C_CR "Text2"
cKonstante:="C_CR"
cText:="Text"
cGes:=cText+cKonstante
Ausgabe: cGes="TextText2"
Viele Grüße
Stevie
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14662
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Beitrag von Jan »

Nur mal eben schnell aus dem Bauch heraus: Legst Du die als PUBLIC an? Soweit ich mich erinnere muß das bei &.... sein. LOCAL geht da nicht.

Jan
stevie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 417
Registriert: Mo, 17. Sep 2007 18:20
Wohnort: Senftenberg
Kontaktdaten:

Beitrag von stevie »

Jan hat geschrieben:Nur mal eben schnell aus dem Bauch heraus: Legst Du die als PUBLIC an? Soweit ich mich erinnere muß das bei &.... sein. LOCAL geht da nicht.

Jan
was public, die Variable oder die define?
Viele Grüße
Stevie
henxl
UDF-Programmierer
UDF-Programmierer
Beiträge: 91
Registriert: Fr, 10. Feb 2006 19:46
Wohnort: Mannheim

Beitrag von henxl »

Hi Stevie,

nach der Hilfe kann der Makro-Operator nur auf PUBLIC- und PRIVATE-Variablen angewendet werden.

Versuch doch folgendes Beispiel (geht davon aus, dass in der define-Konstanten cFunc ein Funktionsname ohne Klammern () als String definiert ist) :

Code: Alles auswählen

EVAL( &("{ || "+cFunc+"() } ") )
Grüße
Heinz
Das einzige, was ich weiß ist, dass ich nichts weiß, Sokrates
stevie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 417
Registriert: Mo, 17. Sep 2007 18:20
Wohnort: Senftenberg
Kontaktdaten:

Beitrag von stevie »

henxl hat geschrieben:Hi Stevie,

nach der Hilfe kann der Makro-Operator nur auf PUBLIC- und PRIVATE-Variablen angewendet werden.

Versuch doch folgendes Beispiel (geht davon aus, dass in der define-Konstanten cFunc ein Funktionsname ohne Klammern () als String definiert ist) :

Code: Alles auswählen

EVAL( &("{ || "+cFunc+"() } ") )
Grüße
Heinz
Habe mal die Variablen public geschaltet, bleibt aber weiterhin unbekannt.
In der Variable steht übrigens keine Funktion, sondern nur ein einfacher Konstantenname mit Funktionen ist das ja kein Problem.
Konstante C_CR = "OK" definiert im Programm.
Konstante kommt als C in Variable an.
Jetzt Variable ausführen.
Ergebnis: "OK"
Viele Grüße
Stevie
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2471
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 104 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Beitrag von Koverhage »

und so ?
bBlock := "{||"+cKonstante+"() }"
nWert := eval( &(bBlock) )
stevie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 417
Registriert: Mo, 17. Sep 2007 18:20
Wohnort: Senftenberg
Kontaktdaten:

Beitrag von stevie »

Koverhage hat geschrieben:und so ?
bBlock := "{||"+cKonstante+"() }"
nWert := eval( &(bBlock) )
cKonstante ist kein Funktionsname.
Lasse ich die Klammern weg ist die Variable trotzdem unbekannt.
Viele Grüße
Stevie
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2471
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 104 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Beitrag von Koverhage »

war ja auch nur ein Beispiel

für cKonstante ist natürlich der Variablenname anzugeben, die den Funktionsnamen enthält.
Bei mir funktioniert das so, ich kann alle Funktionen / Proceduren in eine Variable packen z.B.
cKonstante := "plz() + rtrim(cOrt)"

Bitte beachten: Natürlich dürfen die Funktionen / Proceduren nicht als local deklariert sein wenn die in einer anderen PRG stecken aber das dürfte ja bekannt sein ;-)
stevie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 417
Registriert: Mo, 17. Sep 2007 18:20
Wohnort: Senftenberg
Kontaktdaten:

Beitrag von stevie »

Koverhage hat geschrieben:war ja auch nur ein Beispiel

für cKonstante ist natürlich der Variablenname anzugeben, die den Funktionsnamen enthält.
Bei mir funktioniert das so, ich kann alle Funktionen / Proceduren in eine Variable packen z.B.
cKonstante := "plz() + rtrim(cOrt)"

Bitte beachten: Natürlich dürfen die Funktionen / Proceduren nicht als local deklariert sein wenn die in einer anderen PRG stecken aber das dürfte ja bekannt sein ;-)
Das weiß ich auch.
nur das bei mir in der define Konstante Text drinsteht, der keine Funktion repräsentiert / starten soll.
Viele Grüße
Stevie
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9394
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 105 Mal
Danksagung erhalten: 364 Mal
Kontaktdaten:

Beitrag von Tom »

Die Inhalte von Konstanten können nicht geändert oder überschrieben oder aus Dateien geladen werden. Ich fürchte, hier ist schon der Ansatz falsch.
Herzlich,
Tom
stevie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 417
Registriert: Mo, 17. Sep 2007 18:20
Wohnort: Senftenberg
Kontaktdaten:

Beitrag von stevie »

Tom hat geschrieben:Die Inhalte von Konstanten können nicht geändert oder überschrieben oder aus Dateien geladen werden. Ich fürchte, hier ist schon der Ansatz falsch.
Das ist faktisch eine Art von Ldf-Sprachenwechsel.
Viele Grüße
Stevie
Benutzeravatar
Lewi
1000 working lines a day
1000 working lines a day
Beiträge: 830
Registriert: Di, 07. Feb 2006 14:10
Wohnort: Hamburg
Danksagung erhalten: 2 Mal

Beitrag von Lewi »

Hallo Stevie,
bei Deinem Ansatz gibt es keine "Konstante" bzw. Variable "C_CR". Mittels der Präprossesor-Anweisung "#DEFINE C_CR "TEXT2" wird lediglich beim Compiler-Lauf das Literal C_CR nach "Text2" konvertiert. Wenn Du Dir den entsprechenden Präpressor-Code anschaust, wirst Du feststellen, dass das Literal C_CR durch "Text2" ersetzt wurde. Somit existiert auch keine Variable C_CR.

Eine Lösung besteht darin, dass in Deiner externen Datei, die Du über aFileReadEx einliest, eine entsprechende Funktion deklarierst, die wiederum im Programm existiert und das entsprechende Ergebnis liefert. Innerhalb der Programmfunktionen werden #DEFINE-Anweisungen berücksicht.

Gruß, Olaf
Antworten