Hallo,
hat jemand eine gute Quelle mit einlesbaren Ferienterminen ?
Ich hatte an das ICS-Format gedacht, da gibt es ja diverse Fundstellen mit herunterladbaren Dateien.
Bevor ich das Rad neu erfinde, hat jemand schon eine Routine, um diese ICS-Dateien einzulesen ?
Ferientermine einlesen
Moderator: Moderatoren
- Wolfgang Ciriack
- Der Entwickler von "Deep Thought"
- Beiträge: 2935
- Registriert: Sa, 24. Sep 2005 9:37
- Wohnort: Berlin
- Hat sich bedankt: 13 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
- Wolfgang Ciriack
- Der Entwickler von "Deep Thought"
- Beiträge: 2935
- Registriert: Sa, 24. Sep 2005 9:37
- Wohnort: Berlin
- Hat sich bedankt: 13 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: Ferientermine einlesen
Wen es interssiert, hier eine kurze Routine (benötigt eXPress++ und ToolsIII), um ICS-Dateien einzulesen und in einem ARRAY zurückzuliefern:
Code: Alles auswählen
#include "dcdialog.ch"
#pragma LIBRARY("DCLIPX.lib")
#pragma LIBRARY("XBTBASE1.lib")
#pragma LIBRARY("XBTBASE2.lib")
#define EV_STA "BEGIN:VEVENT"
#define EV_END "END:VEVENT"
#define EV_DESC "SUMMARY:"
#define EV_VON "DTSTART"
#define EV_BIS "DTEND"
#define EV_WO "LOCATION:"
#define EV_DSEP ";VALUE=DATE:"
#define POS_COUNTER 1
#define POS_EVENT 2
#define POS_DATVON 3
#define POS_DATBIS 4
#define POS_FUERWO 5
#define LF chr(10)
#define CRLF chr(13)+chr(10)
****************************************************************************
PROC appsys ; RETURN
****************************************************************************
FUNCTION Main()
local datei:="Schulferien_2015-2016_BE.ics"
** von http://www.sunbird-kalender.de/extension/kalender/
local aEvents, dstr
set date german
dstr:=filestr(datei)
if AT(CRLF,dstr)=0
** falls nur LF, alle LF durch CRLF ersetzen
strfile(atrepl(LF,dstr,CRLF),datei)
endif
********************
aEvents:=ParseVEVENTs(datei)
********************
if len(aEvents)>0
dc_arrayview(aEvents,.T.)
endif
return nil
****************************************************
function ParseVEVENTs(datei)
local counter:=1, aEvent:={}, zeile, rest, rest2
local levent:=.F., nHandle, aGes:={}
nHandle := DC_TXTOPEN( datei )
do while !dc_txteof( nHandle )
zeile:=dc_txtline( nHandle )
if !levent
if EV_STA $ upper(zeile)
levent:=.T.
ASize(aEvent,0)
AAdd(aEvent,{counter++,"","","",""})
endif
elseif EV_END $ upper(zeile)
levent:=.F.
AAdd(aGes, AClone(aEvent))
else
do case
case EV_DESC $ upper(zeile)
rest:=atrepl(EV_DESC,zeile,"")
aEvent[1][POS_EVENT]:=rest
case EV_VON $ upper(zeile)
rest:=atrepl(EV_VON,zeile,"")
if EV_DSEP $ upper(rest)
rest2:=atrepl(EV_DSEP,rest,"")
aEvent[1][POS_DATVON]:=dtoc(stod(rest2))
endif
case EV_BIS $ upper(zeile)
rest:=atrepl(EV_BIS,zeile,"")
if EV_DSEP $ upper(rest)
rest2:=atrepl(EV_DSEP,rest,"")
aEvent[1][POS_DATBIS]:=dtoc(stod(rest2))
endif
case EV_WO $ upper(zeile)
rest:=atrepl(EV_WO,zeile,"")
aEvent[1][POS_FUERWO]:=rest
endcase
endif
dc_txtskip( nHandle, 1 )
enddo
dc_txtclose( nHandle )
return aGes
Viele Grüße
Wolfgang
Wolfgang