Dienstag, 20. November 2007

Meldungen und Infotexte einfach generieren / Messages and infos concatenated easily

Oftmals stehen wir vor der Aufgabe, einen umfangreichen Informationstext (u.U. gefüllt mit Variablenwerten) in einer Message- oder Editbox auszugeben. 

Am Beispiel einer Fehlermeldung könnte dies vielleicht wie folgt aussehen:
 
FUNCTION ShowError
LPARAMETERS vError, vMessage, vCode, vLine, vObject
MESSAGEBOX([in Zeile ] + TRANSFORM(m.vLine) + [: ] + ALLTRIM(m.vCode) ;
+ CHR(13) + [ist folgender Fehler aufgetreten:] + CHR(13) ;
+ CHR(13) + ALLTRIM(STR(m.vERROR)) + [ - ] + ALLTRIM(m.vMessage) + CHR(13) ;
+ CHR(13) + [Der Fehler trat in folgendem Objekt auf:] ;
+ CHR(13) + ALLTRIM(m.vObject), ;
0+64+0, ;
[Programminformation])
ENDFUNC

Abgesehen davon, dass es eine ziemlich aufwendige Sache ist, den Code so 'übersichtlich' aufzubereiten, muss auch sichergestellt werden, dass sämtliche NICHT-Alfanumerischen Felder ordnungsgemäß in Zeichenfolgen gewandelt werden. 

Zudem ist ein nachträgliches Umformatieren/Ergänzen des Textes eine ziemlich nervige Angelegenheit.

Ein einfacherer Weg einen mit Variablen gespickten Text auszugeben UND diesen ggf. schnell und einfach umzuformatieren besteht im Einsatz von TEXT ... ENDTEXT.  

Nutzen wir diese Funktion von Visual FoxPro so sieht die Welt um ein vielfaches einfacher aus:
 
FUNCTION ShowError 
LPARAMETERS vError, vMessage, vCode, vLine, vObject 
LOCAL cMyVar 
TEXT TO cMyVar NOSHOW ADDITIVE TEXTMERGE PRETEXT 2 
in Zeile <<m.vLine>>: <<m.vCode>> 
ist folgender Fehler aufgetreten: 

<<m.vError>> - <<m.vMessage>> 

Der Fehler trat in folgendem Objekt auf: 
<<m.vObject>> 
ENDTEXT 
ENDFUNC 

Praktischerweise müssen wir uns keine Gedanken mehr über den Variablentyp machen. VFP wandelt alle in '<< >>' stehenden Variablen automatisch in Strings.  

Wichtig ist auf jeden Fall der PRETEXT-Parameter. Hier stehen vier additiv anzugebende Werte zur Verfügung.  

1 Entfernt Leerzeichen am Zeilenanfang  
2 Entfernt Tabulatoren am Zeilenanfang  
4 Entfernt Leerzeilen  
8 Entfernt Zeilenvorschübe  

Sollen nun alle Leerzeichen, TABS und Leerzeilen entfernt werden so wird als Flagwert 7 (-> 1+2+4) übergeben. ( Die Entfernung von Zeilenvorschüben <8> ist nur für Datenströme empfehlenswert da die Lesbarkeit doch ein klein wenig leidet. )

Keine Kommentare:

Kommentar veröffentlichen