#!/bin/sh # Beispiel für ncgi, html und javascript \ exec tclsh $0 $@ package require ncgi package require html package require csv package require struct proc letzter_tag_des_monats {monat jahr} {   clock format [clock scan "$jahr-$monat-01 + 1 month - 1 day"] -format %d } # Eingabe einlesen ::ncgi::parse # Monatsvorgabe ist der aktuelle Monat set jahr 2004 set monat [::ncgi::value "monat" \   [clock format [clock second] -format %m]] # # Oberen Teil erzeugen # ::html::init set html [::html::head "Tide für Hamburg"] append html "" append html "" append html [::html::bodyTag] append html [::html::h1 "Tide für Hamburg"] append html [::html::openTag form "action='listing3.tcl'"] set monate {Januar 01 Februar 02 März 03 April 04 \   Mai 05 Juni 06 Juli 07 August 08 September 09 \   Oktober 10 November 11 Dezember 12} set eingabe [::html::select monat "size=1" $monate $monat] append html "Monat $eingabe " append html [html::closeTag] # # Gewünschten Monat aus der CSV-Datei lesen # set dateiname [file join daten "$jahr-$monat.csv"] if {![file exists $dateiname]} {   append html "Keine Daten für Monat $monat vorhanden!"   append html [html::closeTag]   append html [html::closeTag]   puts stdout $html   return } struct::matrix::matrix daten daten add columns 5 set fd [open $dateiname] ::csv::read2matrix $fd daten "," close $fd # # Ausgabe als Tabelle # append html [html::openTag table] append html [html::hdrRow Tag ] set letzterTag [letzter_tag_des_monats $monat $jahr] set zeile 0 set gerade false for {set tag 1} {$tag < $letzterTag} {incr tag} {   if {$gerade} {     set id gerade   } else {     set id ungerade   }   set gerade [expr {!$gerade}]   append html [::html::openTag tr "id='$id'"]   append html [::html::cell "id='tag'" "  $tag\. $monat"]   set tagPattern [format "$jahr-%02i-%02i" $monat $tag]   while {[regexp $tagPattern [daten get cell 1 $zeile]]} {     append html [html::cell "" \       "[daten get cell 4 $zeile] \        [daten get cell 3 $zeile]
\       ([daten get cell 2 $zeile])"]     incr zeile   }   append html [::html::closeTag] } append html [html::closeTag] append html [html::closeTag] puts stdout $html return