Buchempfehlung
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Umfassend, aber leicht verständlich führt dieses Buch in die Programmierung von ATMEL AVR Mikrocontrollern ein. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

fb:porticula NoPaste

Info
Info / Hilfe
Liste
Übersicht / Liste
Neu
Datei hochladen
Suche
Quellcode suchen
Download
Dateidownload

GOG (GottesdienstOrdnungsGenerator

Uploader:Redakteurnemored
Datum/Zeit:27.02.2008 00:47:00
Hinweis: Dieser Quelltext ist Bestandteil des Projekts OpenBook: 2D-Spieleprogrammierung, zu dem es auf FreeBASIC-Portal.de eine Projektseite gibt.
Warnung: Es steht bereits eine neuere Version des Quelltexts zur Verfügung. Die hier vorliegende alte Version könnte Fehler enthalten, die in der neuen Version vielleicht ausgebessert wurden.

declare sub ersetze overload (byref zeile as string)
declare sub ersetze(byref zeile as string, original as string, ersetzung as string)
declare function suchePfarrei(byval eingabe as string) as string

dim as string zeile, z, tag, datum, uhr, info, naechstePfarrei
dim as ubyte s, f1, f2, f3, wobinich, wochenende
'wobinich gibt den Schreibstand an.
'1: Anfangsdaten werden uebernommen (vor dem Kommentar <!-- aktuelle Woche -->)
'2: Daten der "aktuellen Woche" werden uebersprungen
'3: Daten der "folgenden Woche" werden unter "aktuelle Woche" geschrieben
'4: neue Daten (aus gog.txt) werden unter "folgende Woche" bzw. "Resttage" geschrieben
'5: Schlussdaten werden uebernommen (nach dem schliessenden </table>)

f1 = freefile
open "gog.txt" for input as #f1
if eof(f1) then close #f1 : end

'Oeffne die erste HTML-Seite: Astadt
f2 = freefile
name "astadt_gottesdienst.htm", "bak-astadt-" & date & ".htm"
open "bak-astadt-" & date & ".htm" for input as #f2
f3 = freefile
open "astadt_gottesdienst.htm" for output as #f3
wobinich = 1
print "schreibe jetzt astadt ";

do
  if wobinich <> 4 then
    if eof(f2) then
      ' vvv Pfarrei fertig, naechste Pfarrei oeffnen vvv
      if eof(f1) then exit do
      print " fertig!"
      print "schreibe jetzt " & naechstePfarrei & " ";
      close #f2, #f3
      name naechstePfarrei & "_gottesdienst.htm", "bak-" & naechstePfarrei & "-" & date & ".htm"
      open "bak-" & naechstePfarrei & "-" & date & ".htm" for input as #f2
      open naechstePfarrei & "_gottesdienst.htm" for output as #f3
      wobinich = 1
    end if

    line input #f2, zeile
    if wobinich <> 2 then
      'vvv Uebertrag beenden, es folgen die neuen Termine: vvv
      if trim(zeile) = "<!-- Resttage -->" then
        print ".";
        wobinich = 4
        wochenende = 1
        print #f3, "<!-- folgende Woche -->"
        do
          line input #f2, zeile
        loop until trim(zeile) = "</table>"
      else
        print #f3, zeile
      end if
    end if
    'vvv Kopfzeilen beenden, es folgt der zu ueberspringende Teil: vvv
    if trim(zeile) = "<!-- aktuelle Woche -->" then wobinich = 2 : print ".";
    'vvv Alte Woche beenden, der folgende Teil wird zur alten Woche: vvv
    if trim(zeile) = "<!-- folgende Woche -->" then wobinich = 3 : print ".";
  else
    if eof(f1) then
      wobinich = 5 : continue do
    end if
    line input #f1, zeile
    do
      ersetze zeile
      z = left(zeile, 3)
      if z="Mo." or z="Di." or z="Mi." or z="Do." or z="Fr." or z="Sa." or z="So." then
        ' ein neues Datum gefunden
        if (z = "Sa." or z = "So.") and wochenende = 0 then
          print #f3, "": print #f3, "": print #f3, "<!-- Resttage -->"
          ' die Resttage sind wichtig, da die Kirchenwoche mit Samstagabend beginnt,
          ' der Gottesdiestanzeiger aber immer bis zum Sonntag der naechsten Woche reicht
        end if
        if z = "Sa." then wochenende = 1 else wochenende = 0 ' fuer den Resttage-Kommentar
        ' vvv neues Datum in die Datei schreiben vvv
        print #f3, "<tr>"
        tag   = z
        datum = mid(zeile, 5, 6)
        print #f3, "  <td class='gdtop'>" & tag & " " & datum & "</td>"
        zeile = mid(zeile, 12)
        ersetze zeile
        if instr(zeile, "Uhr") then
          ' wenn erste Uhrzeit in derselben Zeile steht, dann merken und weiter unten schreiben
          print #f3, "  <td class='gdtop'> </td>"
          print #f3, "</tr>";
        else
          ' sonst: Beschreibung zum Datum (3. Fastengottesdienst o. ae.)
          print #f3, "  <td class='gdtop'>" & zeile & "</td>"
          print #f3, "</tr>";
          if eof(f1) then wobinich = 5: exit do
          line input #f1, zeile
          continue do
        end if
      end if

      s = instr(zeile, "Uhr")
      if s > 0 then
        print #f3, "<tr>"
        uhr = left(zeile, s-1)
        if left(uhr, 3) = "ab " then
          ' Format: ab 9.00 Uhr
          uhr = mid(uhr, 4)
          if uhr[1] = asc(".") then uhr = "0" & uhr
          uhr[2] = asc(":")
          uhr = "ab " & uhr
        else
          if uhr[1] = asc(".") then uhr = "0" & uhr
          if len(uhr) < 7 then
            ' Format: 9.00 Uhr
            uhr = left(uhr, 5) & " Uhr"
          else
            ' Format: 9.00 - 10.30 Uhr
            ersetze(uhr, " ", "")
            ersetze(uhr, "-", "&#8211;")
            uhr = left(uhr, 5) & "-" & mid(uhr, 13)
            if len(uhr) = 11 then uhr[8] = asc(":")
          end if
          uhr[2] = asc(":")
        end if
        info = mid(zeile, s+3)
        ersetze info
        while -1 ' fauler Trick, um ein Springen aus zwei Schleifen zu ermoeglichen
          if eof(f1) then
            print #f3, "  <td class='gddat'>" & uhr  & "</td>"
            print #f3, "  <td class='gdinf'>" & info & "</td>"
            print #f3, "</tr>";
            wobinich = 5
            exit do
          end if
          line input #f1, zeile
          ersetze zeile
          z = left(zeile, 3)
          if z="Mo." or z="Di." or z="Mi." or z="Do." or z="Fr." or z="Sa." or z="So." _
             or instr(zeile, "Uhr") > 0 or left(zeile, 28) = "Gottesdienste in der Pfarrei" then exit while
          info &= " " &zeile
        wend
        print #f3, "  <td class='gddat'>" & uhr  & "</td>"
        print #f3, "  <td class='gdinf'>" & info & "</td>"
        print #f3, "</tr>";
        continue do
      end if

      if left(zeile, 17) = "Gottesdienste in " then
        naechstePfarrei = suchePfarrei(mid(zeile, 29))
        wobinich = 5
        exit do
      end if

      if zeile <> "" then
        print #f3, "<tr>"
        print #f3, "  <td> </td>"
        print #f3, "  <td>" & zeile & "</td>"
        print #f3, "</tr>";
      end if
      if eof(f1) then wobinich = 5: exit do
      line input #f1, zeile
      ersetze zeile
    loop
    print #f3, "" : print #f3, "</table>"
  end if
loop
close
print " fertig!"
print "Alle Dateien wurden geschrieben."

sub ersetze(byref zeile as string)
  ersetze(zeile, chr(9), " ")
  zeile = trim(zeile)
  ersetze(zeile, "†", "&dagger;")
  ersetze(zeile, "–", "&#8211;")
  ersetze(zeile, "„", "&#8222;")
  ersetze(zeile, "“", "&#8220;")
  ersetze(zeile, "ä", "ä")
  ersetze(zeile, "Ä", "Ä")
  ersetze(zeile, "ö", "ö")
  ersetze(zeile, "Ö", "Ö")
  ersetze(zeile, "ü", "ü")
  ersetze(zeile, "Ãœ", "Ü")
  ersetze(zeile, "ß", "ß")
end sub

sub ersetze(byref zeile as string, original as string, ersetzung as string)
  dim as ubyte z
  do
    z = instr(zeile, original)
    if z = 0 then exit do
    zeile = left(zeile, z-1) & ersetzung & mid(zeile, z+len(original))
  loop
end sub

function suchePfarrei(byval eingabe as string) as string
  eingabe = lcase(eingabe)
  if instr(eingabe, "behausen") then return "behausen"
  if instr(eingabe, "cedorf") then return "cedorf"
  print "EINLESEFEHLER" : end
end function