Mittwoch, 22. Oktober 2008

Beliebig formatierte Datum-/Zeitstempel / Free formatted date- and timestamps

Immer wieder besteht der Bedarf, einen Dateinamen mit einem Datum- und/oder Zeitstempel zu versehen. Da der Aufbau jedoch jedes Mal anders aussieht, und alles (wie so oft) schnell gehen muss, sammeln sich im Laufe der Zeit die verschiedensten Funktionen an um den Dateinamen aufzubereiten. Um dieses Sammelsorium ein klein wenig zu entschlacken gibt es in diesem Blogeintrag einen Mustercode für eine zentrale Formatierung die letztlich nur einen Parameter benötigt, nämlich das Formatmuster.

Zulässige Formatierungskennungen sind YYYY bzw. YY für Jahr, MM für Monat, DD für Tag, hh für Stunde, mm für Minute, ss für Sekunde. Wird bspw. als Format die folgende Zeichenkette übergeben: Invoice-Spar-DD.MM.YYYY.edi wird daraus: Invoice-Spar-22.10.2008.edi

Die Zeichenkette: Invoice-Spar-YYYY.MM.DD_hh.mm.ss.edi wird zu: Invoice-Spar-2005.10.22_07.45.56.edi

Hier nun der Code:

FUNCTION FormatDTStamp
LPARAMETERS vFormat as String

    LOCAL   lcJahr as String, lcMonat as String, lcTag as String, ;
            lcStunde as String, lcMinute as String, lcSekunde as String, ;
            lcStamp as String
         
    lcJahr      = PADL(YEAR(DATE()),4,[0])
    lcMonat     = PADL(MONTH(DATE()),2,[0])
    lcTag       = PADL(DAY(DATE()),2,[0])
    lcStunde    = PADL(HOUR(DATETIME()),2,[0])
    lcMinute    = PADL(MINUTE(DATETIME()),2,[0])
    lcSekunde   = PADL(SEC(DATETIME()),2,[0])
    lcStamp     = m.vFormat

    DO CASE
    CASE OCCURS([YYYY],lcStamp) > 0
        lcStamp = STRTRAN(lcStamp,[YYYY],lcJahr)
    CASE OCCURS([YY],lcStamp) > 0
        lcStamp = STRTRAN(lcStamp,[YY],RIGHT(lcJahr,2))
    ENDCASE

    lcStamp = STRTRAN(lcStamp,[MM],lcMonat)
    lcStamp = STRTRAN(lcStamp,[DD],lcTag)
    lcStamp = STRTRAN(lcStamp,[hh],lcStunde)
    lcStamp = STRTRAN(lcStamp,[mm],lcMinute)
    lcStamp = STRTRAN(lcStamp,[ss],lcSekunde)

    RETURN lcStamp

ENDFUNC

Die Funktion kann um beliebige weitere Platzhalter ergänzt werden. Denkbar wäre eine textuelle Darstellung von Monat und Tag durch eine dreistellige Platzhalterdefinition (Jan,Feb,Mär,... -> MMM bzw. Mon,Die,Mit,... -> DDD).

Eine solche Umsetzung unterstützt VFP mit den beiden Funktionen CMONTH() und CDOW().

Mittwoch, 1. Oktober 2008

Excel 2007 Format lesen und schreiben / read and write Excel 2007 format

Craig Boyd hat in seinem Blog hochinteressanten Code zum lesen und schreiben des aktuellen Excel 2007 Formats (xlsx) bereitgestellt.

Die direkt vom Blog herunterladbare ZIP-Datei (19,15 KB) enthält ein kleines PRG. Darin finden sich u.a. die beiden Funktionen 'AppendFromExcel()' und 'CopyToExcel()' mit denen die Bearbeitung von xlsx-Dateien ermöglicht wird, ohne das Office 2007 auf dem Rechner installiert sein muss.

Hier geht's zu Craig's Blog