Ferientermine einlesen

Zugriff, Engines, Konvertierung. Von ADS über DBF bis zu SQL.

Moderator: Moderatoren

Antworten
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2934
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Ferientermine einlesen

Beitrag von Wolfgang Ciriack »

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 ?
Viele Grüße
Wolfgang
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2934
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: Ferientermine einlesen

Beitrag von Wolfgang Ciriack »

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
Antworten