Auf dieser Seite sammeln wir kleine, nützliche Hilfsroutinen, die Sie problemlos in Ihren eigenen Programmen einsetzen können.
Wenn Sie auch zur Vergrösserung der Liste beitragen möchten, scheuen Sie sich nicht, uns Ihre Schnipsel zu schicken.
1. Eine EMail-Adresse auf formale Richtigkeit prüfen
Procedure isEMail(cEMail : String) : Byte
//check email address format
return Sel(cEMail like '?*@?*.?*')
Endproc
Diese kleine Prozedur überprüft, ob die übergebene Zeichenkette dem typischen Muster einer EMail-Adresse entspricht. Der Aufruf kann dann z.B. so erfolgen:
Procedure checkInput
...
if isEMail(GetQueryString("EMail")) = 0 then
cgiwriteln("ERROR!")
end
...
Endproc
2. Ein tdbengine-Datum in ein anderes Datumsformat konvertieren
Procedure formatDate(nDate : Integer) : String
// convert Date from DD,MM.YYYY to YYYY/MM/DD
var cStandard : String = DateStr(nDate)
return cStandard[7,4] +"/"+ cStandard[4,2] +"/"+ cStandard[1,2]
Endproc
Beispielaufruf:
...
CGIWriteLn( "Datum: " + formatDate( Today -7) ) // z.B. Datum: 2004/04/21
...
3. Alle offenen Tabellen mit einem Aufruf schliessen
Procedure closeAllDB
// Closes all open tables
While MaxFile > 0 do CloseDB(MaxFile) End
EndProc
4. Anzahl der Zeilen einer Textdatei ermitteln
Procedure countLines(fn : String) : Integer
Var i,fh:Integer
fh:=Reset(fn)
While not EOT(fh) do
ReadLn(fh)
i++
End
Close(fh)
Return i
EndProc
5. Eigentlichen Feldbezeichner ermitteln
Die Funktion Label() liefert bei Link-Feldern immer auch den Namen der verknüpften Tabelle in Klammer mit. Dies umgeht diese Prozedur:
Procedure getLabel(dbHANDLE, iFieldNo : Integer) : String
// get bare field name
var c : String
return (c := GetStructure(dbHANDLE, iFieldNo))[1,Pos(',',c)-1]
Endproc
6. Variable mit Inhalt eines gleichnamigen CGI-Parameters befüllen
Mit der folgenden Funktion können Variablen mit dem Inhalt gleichnamiger CGI-Parameter befüllt werden.
Procedure CGIGetParamVar(Var x : String)
// fills X with cgi value
x:=CGIGetParam(VarName(x))
EndProc
Beispielaufruf:
Procedure Main
Var Username : String
CGIGetParamVar(Username)
CGIWriteLn("Hallo "+Username)
Endproc
7. REAL-Wert in Exponentialschreibweise ausgeben
PROCEDURE RealToExp(x : REAL) : STRING
VAR l : REAL
IF x=0 THEN
RETURN '0.0000000000E0'
ELSIF abs(x)>=1 then
l:=INT(log(ABS(x))/log(10))
ELSE
l:=INT(log(ABS(x))/log(10))-1
END
RETURN str(x/exp(log(10)*l),1,10)+'E'+str(l)
ENDPROC
8. INTEGER-Wert in Hexadezimal ausgeben
Wandelt einen 16-Bit Dezimalwert (0-65536) nach Hexadezimal
PROCEDURE IntToHex(x : integer) : STRING
//converts from decimal to hexadecimal
VAR hs : STRING
hs:='0123456789ABCDEF'
RETURN hs[1+x DIV 4096 MOD 16]+hs[1+x MOD 4096 DIV 256]+hs[1+x MOD 256 DIV 16]+hs[1+x mod 16]
ENDPROC
9. Schaltjahr erkennen
procedure isLeapYear( nY : INTEGER ) : INTEGER
// checks the given year to be a leap year
if (((nY mod 4 = 0) and (nY mod 100 # 0)) or (nY mod 400 = 0))
Return 1
else
Return 0
end
endproc
10. CGI Parameter unabhängig von METHOD ermitteln
Procedure getCGI(cParam : String): String
// gets a given cgi parameter no matter which METHOD was used
Var cRes : String;
If cRes := CgiGetParam(cParam) = '' then
cRes := GetQueryString(cParam)
End
Return cRes
Endproc
11. Ermitteln, ob Windows als Betriebssystem läuft
Procedure isWindows : Integer
//checks for win32 as operating system
if GetEnv("TDB_OS") like "win32" then return 1 else return 0 end
Endproc
Beispieleinsatz:
...
if isWindows
then CGIExec("C:\WINDOWS\notepad.exe",0)
else CGIExec("/usr/bin/nano",0)
end
...
12. Ist der Tag x ein regulärer Arbeitstag?
Diese Funktion hat uns Herr Sitz eingesandt. Sie nimmt eine Feiertagsliste zu Hilfe, um für die kommenden Jahre jeden Tag als Arbeitstag identifizieren zu können, oder eben nicht. Bitte stellen Sie daher sicher, dass Sie auch die INI-Datei entsprechend erreichbar halten.
Procedure isArbeitstag (date:Integer):Integer
/*
Autor: Horst H. Sitz
../ini/festtag.ini enthält bekannte Feiertage (siehe unten)
*/
Var n :Real
IF LeftStr(DayOfWeek(date),1)='S' THEN //'S'amstag or 'S'onntag
date:=0
Else
n:=Val(GetIdent('../ini/festtag.ini','0.n'))+1
While n--#0,Val(GetIdent('../ini/festtag.ini','0.'+Str(n))+ Str(Year(date)))#date DO END
If n=0 THEN
n:=Val(GetIdent('../ini/festtag.ini',Str(Year(date))+'.n'))+1
While n--#0,Val(GetIdent('../ini/festtag.ini',Str(Year(date))+'.'+Str(n)))#date DO END
IF n=0 then date:=1 Else date:=0 END
Else
date:=0
End
End
Return date
EndProc
Die Datei festtag.ini
[0]
#Feste Feiertage ohne Jahreszahl!
#n=Anzahl der Einträge
n=7
#Neujahr
1=1.1.
#Maifeiertag
2=1.5.
#Tag der Deutschen Einheit
3=3.10.
#Heiligabend
4=24.12.
#1.Weihnachtstag
5=25.12.
#2.Weihnachtstag
6=26.12.
#Silvester
7=31.12.
#Bei den variablen Feiertagen brauchen nur die aufgenommen werden, die nicht auf Sonntage fallen.
#Hier mit Jahreszahl!
#n=Anzahl der Einträge für das Jahr
[2004]
n=4
#Karfreitag
1=9.4.2004
#Ostermontag
2=12.4.2004
#Christi Himmelfahrt
3=20.5.2004
#Pfingstmontag
4=31.5.2004
[2005]
n=4
#Karfreitag
1=25.3.2005
#Ostermontag
2=28.3.2005
#Christi Himmelfahrt
3=5.5.2005
#Pfingstmontag
4=16.5.2005
13. Markierungsliste einer Tabelle speichern
Die folgende Funktion speichert die Markierungen einer Tabelle in eine externe Datei, damit diese zu einem späteren Zeitpunkt wieder eingelesen werden kann.
PROCEDURE saveMarks(db : INTEGER; cDest : STRING) : INTEGER
VAR hdl : INTEGER
VAR aMarks : TBITS[]
InitArray(aMarks[FileSize(db)])
GetMarks(db, aMarks)
IF hdl:=f_create(cDest)>0 THEN
f_write(hdl,aMarks); f_close(hdl)
END
return NBits(aMarks)
ENDPROC
14. Markierungsliste einer Tabelle wieder laden
Mit dieser Funktion kann eine zur Tabelle zuvor abgespeicherte Markierungsliste wieder eingelesen werden.
PROCEDURE restoreMarks(db : INTEGER; cSource : STRING) : INTEGER
VAR hdl : INTEGER
VAR
aMarks
: TBITS[]
IF hdl:=f_open(cSource)>0 THEN
f_read(hdl,
aMarks
); f_close(hdl)
END
PutMarks(db,
aMarks
)
return NBits(
aMarks
)
ENDPROC
|