| |
|
|
- Seite 1 - |
|
Michael W. | Hab ein Brett vorm Kopf. Ich möchte doch nur ein Hash-Array aus einer Funktion heraus nutzen. Weder die direkte Angabe noch die Parameterübergabe funktionieren.
Wer zerdrückt mir den kleinen Krabbler... (erl. )
' Vorgaben :
' Set("HashDel", "|")
' Set("HashListDel", Chr$(254))
' Set("HashMode", 0) // 0= case sensitive, 1= ignore case
MkDir "C:\\temp"
If %IOResult : Beep : EndIf
Set("LogFile", "C:\\temp\\XProfanErrorLog.txt")
LogOut "---start"
Declare hash TransVars[]
TransVars["align"] = "\qcenter\q"
TransVars["valign"] = "\qmiddle\q"
TransVars["bgcolor"] = "\q#FFFF00\q"
TransVars["class"] = "\qSmaller\q"
TransVars["font_color"] = "\q#FF0000\q"
TransVars["text_1"] = "Eintrag"
LogOut "hash erzeugt"
Proc HashTrans
Parameters hash t_v[], string Text
Declare string key,value
LogOut "in hashtrans"
' ForEach TransVars[], key, value
ForEach t_v[], key, value
LogOut "key= "+ key + ", value= " + value
Text = Translate$( Text, "{°"+key+"°}", value )
EndFor
LogOut "hashtrans ende"
Return Text
EndProc
Cls
LogOut "hinter Cls"
Print HashTrans("<td align={°align°} valign={°valign°} bgcolor={°bgcolor°} class={°class°}><font color={°font_color°}>{°text_1°}</font></td>")
LogOut "hinter dem Funktionsaufruf"
Clear TransVars[]
LogOut "hinter Clear"
WaitKey
Set("LogFile", "")
End
|
|
|
| System: Windows 8/10, XProfan X4 Programmieren, das spannendste Detektivspiel der Welt. | 20.03.2016 ▲ |
|
|
|
|
« Dieser Beitrag wurde als Lösung gekennzeichnet. » |
|
RGH | Also mit Parameter funktioniert es, wenn Du dann auch TransVars[] als ersten Parameter beim Aufruf der Funktion angibst:
Das andere Problem ist tatsächlich ein solches. Wenn es auch Absicht war, die Schleifenvariablen bei FOR / FOREACH als lokale Variablen zu gestalten (wie etwa in Delphi), so schieße ich hier möglicherweise ein wenig über das Ziel hinaus, wenn es auch das Hash-Array betrifft. Andererseits wird man in den meisten Fällen, wenn man eine Funktion/Prozedur schreibt, die ein Hash-Array bearbeitet ihr dies auch als Parameter übergeben.
Es wäre tatsächlich zu überlegen, ob ich die Beschränkung auf lokale Variablen hier in der nächsten Version weglasse.
Gruß Roland |
|
|
| Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 20.03.2016 ▲ |
|
|
|
|
|
Michael W. | Die direkte Angabe im Hauptprogramm funktioniert...
Also läuft da irgendetwas schief.
Wenn schon nicht als Parameter "hash t_v[]", dann müsste zumindest der direkte Aufruf "TransVars[]" in der Funktion funktionieren. Geht aber nicht.
' Vorgaben :
' Set("HashDel", "|")
' Set("HashListDel", Chr$(254))
' Set("HashMode", 0) // 0= case sensitive, 1= ignore case
MkDir "C:\\temp"
If %IOResult
Beep
EndIf
Set("LogFile", "C:\\temp\\XProfanErrorLog.txt")
LogOut "---start"
Declare hash TransVars[]
TransVars["align"] = "\qcenter\q"
TransVars["valign"] = "\qmiddle\q"
TransVars["bgcolor"] = "\q#FFFF00\q"
TransVars["class"] = "\qSmaller\q"
TransVars["font_color"] = "\q#FF0000\q"
TransVars["text_1"] = "Eintrag"
LogOut "hash erzeugt"
Cls
LogOut "hinter Cls"
'Print HashTrans("<td align={°align°} valign={°valign°} bgcolor={°bgcolor°} class={°class°}><font color={°font_color°}>{°text_1°}</font></td>")
'LogOut "hinter dem Funktionsaufruf"
var string text = "<td align={°align°} valign={°valign°} bgcolor={°bgcolor°} class={°class°}><font color={°font_color°}>{°text_1°}</font></td>"
'Proc HashTrans
' Parameters hash t_v[], string Text
Declare string key,value
LogOut "in hashtrans"
ForEach TransVars[], key, value
' ForEach t_v[], key, value
LogOut "key= "+ key + ", value= " + value
Text = Translate$( Text, "{°"+key+"°}", value )
EndFor
LogOut "hashtrans ende"
' Return Text
'EndProc
print text
LogOut text
Clear TransVars[]
LogOut "hinter Clear"
WaitKey
Set("LogFile", "")
End
|
|
|
| XProfan X3System: Windows 8/10, XProfan X4 Programmieren, das spannendste Detektivspiel der Welt. | 20.03.2016 ▲ |
|
|
|
|
RGH | Also mit Parameter funktioniert es, wenn Du dann auch TransVars[] als ersten Parameter beim Aufruf der Funktion angibst:
Das andere Problem ist tatsächlich ein solches. Wenn es auch Absicht war, die Schleifenvariablen bei FOR / FOREACH als lokale Variablen zu gestalten (wie etwa in Delphi), so schieße ich hier möglicherweise ein wenig über das Ziel hinaus, wenn es auch das Hash-Array betrifft. Andererseits wird man in den meisten Fällen, wenn man eine Funktion/Prozedur schreibt, die ein Hash-Array bearbeitet ihr dies auch als Parameter übergeben.
Es wäre tatsächlich zu überlegen, ob ich die Beschränkung auf lokale Variablen hier in der nächsten Version weglasse.
Gruß Roland |
|
|
| Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 20.03.2016 ▲ |
|
|
|
|
Michael W. | Ich danke Dir.
Durch das viele hin und her habe ich da tatsächlich was übersehen.
Eigentlich ist die Sache mit den lokalen Variablen ok, es fragt sich nur wie das dann bei sehr großen Hasharrays aussieht.
Hier nochmal die funktionsfähige Version.
|
|
|
| XProfan X3System: Windows 8/10, XProfan X4 Programmieren, das spannendste Detektivspiel der Welt. | 21.03.2016 ▲ |
|
|
|