Deutsch
Forum

Hash aus einer Funktion heraus nutzen

 
- 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:
Print HashTrans(TransVars[],"<td align=....

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 X3
System: 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:
Print HashTrans(TransVars[],"<td align=....

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.
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"

Proc HashTrans

    Parameters hash t_v[], string Text
    Declare string key,value
    ForEach t_v[], key, value
    Text = Translate$( Text, "{°"+key+}", value )
    EndFor
    Return Text

EndProc

Cls
Print HashTrans(TransVars[],"<td align={°align°} valign={°valign°} bgcolor={°bgcolor°} class={°class°}><font color={°font_color°}>{°text_1°}</font></td>")
Clear TransVars[]
WaitInput
End
 
XProfan X3
System: Windows 8/10, XProfan X4
Programmieren, das spannendste Detektivspiel der Welt.
21.03.2016  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

4.847 Betrachtungen

Unbenanntvor 0 min.
Walter10.05.2021
Michael W.31.07.2017
derSchu12.08.2016
Torsten Rümker10.05.2016
Mehr...

Themeninformationen

Dieses Thema hat 2 Teilnehmer:

Michael W. (3x)
RGH (1x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie