Deutsch English
Blog
Home
Über tdbengine
Newsletter
Download
Helpware
Chat
Dokumentation
Einführungskurs
Befehlsreferenz
HOWTO - Wie kann ich...?
Schnipsel
Projekte
Links
Benchmarks
Bug Reporting
Supportanfrage
 
Home    Überblick    Suche    Impressum    Kontakt    Mitglieder
Code-Schnipsel
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



Siehe auch:





tdbengine Anwendungen im Web:

Open-Source Web CMS


Open-Source Bug-Tracking


Free wiki hosting

Open-Source Wiki-System

Kostenloses Foren-Hosting

Diät mit tdbengine 8-)

tdbengine chat
irc.tdbengine.org
#tdbengine

   Copyright © 2003-2004 tdb Software Service GmbH
   Alle rechte vorbehalten. / All rights reserved
   Letzte Änderung: 12.05.2004
{Fehler für :execmacro{execmacro="sessionspy"}


ranking-charts.de

Programmers Heaven - Where programmers go!