Ausschreibung: Liniendiagramm erstellen
von ActiveVB-Team
Beschreibung
Kurzinfo
- Titel: Liniendiagramm aus Textdatei-Daten erstellen
- Ausschreibungsbeginn: 01.02.2004
- Einsendeschluß: 20.02.2004
- Auftraggeber: Christian Weber
- Jury: Klaus Langbein, Helge Rex, Elmar Steinböck
- Preisgeld: 30 Euro
Aufgabenstellung
Aus Daten in einer Textdatei soll ein Liniendiagramm erstellt werden. Dabei ist sehr genau den Wünschen des Auftraggebers nachzukommen. Hier eine ausführliche Beschreibung der Aufgabe:
Die Daten liegen in folgendem Format vor:
02.01.2004 'Zeile 1 'Zeile 2 00:00 198 'Zeile 3 00:15 194 'usw. 00:30 175 00:45 171 01:00 160 01:15 147 usw.
Die ersten fünf Stellen ab Zeile 3 stellen die Uhrzeit dar (X-Achse). Es sind immer 15-Minuten-Schritte, dann folgt eine Leerstelle und dann der Wert, der als Linie dargestellt werden soll (Y-Achse). Dargestellt werden sollen immer 24 Stunden. Der darzustellende Wert ist beliebig groß.
Skalierung X-Achse: Es ist ausreichend, wenn die X-Achse in Zwei-Stunden-Schritten skaliert ist, z.B. 0 2 4 6 usw. Die Linien selbst müssen aber in 15-Minuten-Schritten dargestellt werden! Skalierung Y-Achse: Ausgerichtet am Wert. Zu bedenken ist, dass der Wert beliebig groß sein kann (theoretisches Maximum liegt hier aber bei 250.000). Angenommen der Wert liegt bei 100000, genügt es in 20.000er-Schritte zu skalieren, also 0 20.000 40.000 60.000 usw. Gut wäre eine einstellbare Skalierung bei der Y-Achse aber dies ist nicht unbedingt nötig. Skalierung allgemein: Es müssen je Skalierungsschritt Linien gezogen werden. Z.B. bei Wert 20.000 eine Linie horizontal über das Diagramm, so dass man den Wert einfacher ablesen kann - wie es bei den meisten Diagrammen der Fall ist...
Wie gesagt sollen immer 24h dargestellt werden. Die Werte für einen Tag befinden sich immer in einer einzelnen Textdatei. Die Werte für das Beispieldatum 02.01.2004 sind in der Datei 20040102.txt (JahrMonatTag.txt) im Programmpfad/Daten. Angenommen, es ist jetzt 15:09 Uhr am 03.01.2004. Um nun die Daten der letzten 24h darzustellen, müssen die Daten von Textdatei 20040102.txt und 20040103.txt geöffnet und ausgelesen werden. Da es 15:09 Uhr ist, müssen die Daten vom 02.01.2004 15:00 Uhr bis 03.01.2004 15:00 Uhr dargestellt werden.
Wichtig ist, dass die Daten nicht immer bei 0 Uhr anfangen, also die Textdatei auch so aussehen kann:
02.01.2004 'Zeile 1 'Zeile 2 15:00 198 'Zeile 3 15:15 194 'usw. 15:30 175 15:45 171 16:00 160 16:15 147 usw. Und das zwischendrin auch Daten fehlen können: 02.01.2004 'Zeile 1 'Zeile 2 00:00 198 'Zeile 3 00:15 194 'usw. 01:15 147 usw.
Wenn Daten zwischendrin fehlen sollten, muss an dieser Stelle die Linie enden und am nächsten zur Verfügung stehendem Wert weitergeführt werden.
Das Ganze muss auf einen CmdButton-Klick ausgelöst werden. Was schön wäre aber nicht unbedingt erforderlich ist: Einstellung der Farben für Skalierung (Text) und Linien.
Hilfestellung
Als Hilfestellung dienen zwei Textdateien mit Beispiel-Daten:
Bedingungen
Es dürfen nur Standard-Komponenten und API-Aufrufe verwendet werden. Das Programm soll unter allen gängigen Windows-Versionen ab Windows 98 laufen. Das Programm muss in VB6 geschrieben werden.
Ermittlung des Gewinners
Es werden alle Einsendungen ausgewertet, die bis Einsendeschluss eingegangen sind. Der Gewinner wird durch die Vergabe von Punkten ermittelt. Jedes der drei Jurymitglieder vergibt 0-80 Punkte. Einsendungen, die die Aufgabe nicht ordnungsgemäß ausführen (d.h. bei fehlenden Daten in den Dateien nicht richtig funktionieren usw.), werden ohne Wertung disqualifiziert. 20 Punkte werden auf Extra-Features wie Einfärbbarkeit des Diagramms usw. vergeben.
Strukturierung/Verständlichkeit | 30 Punkte |
Kommentierung | 30 Punkte |
Extra-Features | 20 Punkte |
Sollte ein Punktegleichstand herrschen, gewinnt diejenige Ausschreibung, die am verständlichsten und ausführlichsten kommentiert ist.
Weitere Regelungen
Einsendungen müssen per Email an Kopfgeld@ActiveVB.de gesandt werden.
Die Themen dürfen im Forum diskutiert werden, Einsendungen werden jedoch bis zum Einsendeschluß geheimgehalten.
Preisgeld
Das Preisgeld von 30 Euro wird per Überweisung an den Gewinner ausgezahlt.
Anmerkung
Alle Einsendungen dürfen nach Einsendeschluß von ActiveVB.de veröffentlicht werden.
Lösung
Wie erwartet, sind zu dieser Ausschreibung zahlreiche Lösungsvorschläge eingegangen. Insgesamt erreichten uns 22 Zusendungen. Dabei sind sowohl minimalistische Lösungen als auch regelrechte Overkill-Anwendungen eingegangen. Sehr viele Einsendungen waren leider auf Anhieb nicht zum Laufen zu bringen, da die Dateinamen fest verdrahtet waren, das Daten-Verzeichnis nicht berücksichtigt wurde oder schlicht jede Fehlerbehandlung fehlte.
Solche Vorkommnisse wurden mit Punkteabzug bewertet. Leider mussten wir auch eine Einsendung disqualifizieren. Guido Beckmanns Code sieht zwar sehr vielversprechend aus, war von uns jedoch nicht zum Laufen zu bringen. Mittlerweile scheint das Problem gefunden zu sein: Guido hat sein Projekt in VB6 mit dem Service Pack 5 entwickelt, während die Juroren ältere SP-Versionen installiert hatten. Im SP5 wurde scheinbar die Auslöse-Reihenfolge einiger Ereignisse geändert, was zu dem Fehler führte. Mit installiertem Service Pack 5 scheint Guidos Code zu funktionieren, alle anderen können auf Helges Modifikation zurückgreifen, die auch mitgeliefert wird.
Sieger der Ausschreibung ist diesmal Konrad Rudolph mit 175 Punkten. Sein Code ist in Klassen gekapselt, was eine leichte Wiederverwendbarkeit ermöglicht. Alle relevanten Code-Abschnitte sind sauber kommentiert. Außerdem ist eine Readme-Datei beigelegt. Das Programm war - im Gegensatz zu vielen anderen - nicht dazu bewegbar, Laufzeitfehler zu produzieren. Gut gefällt uns auch die Lösung von Claus von der Burchard . Er bekommt 160 Punkte. Claus hat das Diagramm als Benutzersteuerelement konzipiert und sogar eine HTML-Dokumentation beigelegt. Dicht darauf folgen mit jeweils 145 Punkten Artur Mattern und Daniel Wittwer sowie Joachim Burlein mit 140 Punkten. Bernd Uhlworms Programm ist eine der Overkill-Lösungen. Nach unserer Ansicht ließe es sich sicher gut als Freeware-Tool vertreiben, für die geforderte Aufgabe ist es allerdings viel zu überladen.
Vom ActiveVB-Team bewerteten diesmal Elmar und Helge. Da der Autraggeber der Ausschreibung aus gesundheitlichen Gründen eine Bewertung leider nicht vornehmen konnte, erklärte sich Klaus auf seinen Vorschlag hin bereit, der dritte Juror zu sein.