Auswertung Ereignisliste

Du hast eine Idee für ein Projekt?
Antworten
AlexS_
User
Beiträge: 2
Registriert: Donnerstag 6. August 2009, 10:48

Hallo,

ich habe in meiner Hauselektrik ein Gerät (Gira Homeserver), das über Logikbausteine programmiert werden kann, um bestimmte Aufgaben zu erledigen. Unter anderem kann dieses Gerät einen Bildschirm ansteuern, auf dem die Zustände der Hauselektrik visualisiert werden. Auf diesem Bildschirm möchte ich ein Liste der nächsten anstehenden Ereignisse anzeigen (z.B. Müllabfuhr, Geburtstage usw). Die Ereignisse sollen aus einer Textdatei eingelesen werden. Inhalt als Beispiel:
17.01. Anna Geburtstag
05.02. Stefan Geburtstag
23.03. Michael Geburtstag
17.04. Tine Geburtstag
20.05. Peter Geburtstag
10.06. Müllabfuhr
13.ß7. Anja Geburtstag
05.08. Jonathan Geburtstag
06.08. Müllabfuhr
17.09. Susanne Geburtstag
17.09. Petra Geburtstag
22.10. Katharina Geburtstag
22.10. Müllabfuhr
22.10. Holger Geburtstag
14.11. Constantin Geburtstag
23.12. Tina Geburtstag

Jetzt zum eigentlichen Problem: Der Logikbaustein, der aus der Textdatei die nächsten 10 Ereignisse liest, exisitiert noch nicht. Es gibt aber die Möglichkeit, selber Logikbausteine zu erstellen, die für komplexere Aufgaben auf Python zurückgreifen. Damit bin ich allerdings überfordert.

Hier meine Bitte an Euch: Kann jemand ein Skript erstellen, das diese Aufgaben erledigt:
1. Einlesen der Textdatei
2. Speichern der nächsten 10 Ereignisse ab heute in einem Array
3. Gegen Jahresende sollen natürlich dann ggfls die Termine ab Januar berücksichtigt werden, wenn die restlichen Ereignisse des Jahres weniger als 10 sind.

Leider gibt es einige blöde Randbedingungen:
1. Das Gerät kennt nur die module 'time' und 'string' (neben builtin)
2. Das Gerät kennt nur einen streng linearen Ablauf, d.h. for-Schleifen sind nicht möglich.
3. Ergebnisse können pro Zeile in einer Variablen gespeichert werden, die auch eine Liste sein kann.

Hier mal ein Beispiel einer Zeile, die das Gerät verarbeiten kann (habe ich einem anderen Logikbaustein entnommen):
map( lambda x:x.strip().split(chr(124),1)[0].strip(), EN[2].split('\n') ).index( __import__('time').strftime('%d.%m') )

EN[2] ist hierbei die Speicherstelle, in der die eingelesene Textdatei liegt. Das Ergebnis wird in einer anderen Liste gespeichert

Wäre toll, wenn sich jemand hier herausgefordert fühlt, diese Aufgabe zu lösen.

Vielen Dank schonmal im Voraus.

Gruß

Alex
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo,

du hast das Forum falsch verstanden: es geht nicht darum, dass jemand etwas für dich programmiert, sondern um Hilfestellung bei konkreten Problemen. Daher wird sich mit hoher Wahrscheinlichkeit niemand finden, der das Programm schreibt.

Du kannst ja mal mit dem Tutorial anfangen und ein wenig Code produzieren. Dazu gibt es dann auch sicher Hilfe.
Das Leben ist wie ein Tennisball.
AlexS_
User
Beiträge: 2
Registriert: Donnerstag 6. August 2009, 10:48

Hallo EyDu,

ja, das hatte ich schon fast befürchtet, aber ich habe mir gedacht, ich probiere es einfach mal. Schade. Na gut, dann werde ich mal versuchen, einen Code zu erstellen, der in die Richtung geht. Ich hatte schonmal damit angefangen, bin dann aber hängengeblieben. Soweit bin ich bis jetzt:

Code: Alles auswählen

import time
import string
SN = range (10)

SN[0] = 0 # Reserve
SN[1] = 0 # Jahr
SN[2] = 0 # Monat
SN[3] = 0 # Tag
SN[4] = 0 # Stunde
SN[5] = 0 # Minute
SN[6] = 0 # Sekunde
SN[7] = 0 # Wochentag
SN[8] = 0 # Tag des Jahres
SN[9] = 1  

# Versuche zur Zeitumwandlung:
SN[1:10] = time.localtime()
print SN
Datum_heute_sec = time.mktime([SN[1],SN[2],SN[3],SN[4],SN[5],SN[6],SN[7],SN[8],SN[9]])
print 'Datum_heute_sec: ' + str(Datum_heute_sec)
print

# Datei einlesen:
f=open('d:\Ereignisse.txt')
Ereignisse_file=f.read()
print 'Eingelesen aus Datei (Ereignisse_file):'
print Ereignisse_file
print

#  und Zeilenweise in Array splitten:
Ereignisse_split=string.split(Ereignisse_file,'\n')
print 'String gesplittet (Ereignisse_split):'
print Ereignisse_split
Das funktioniert soweit schonmal und liefert mir ein Array, in dem jede Zeile ein Feld ist. Jetzt möchte ich aber gerne das Datum jedes einzelnen Arrayeintrages ('05.08. Jonathan Geburtstag') in die Sekundenzeit umwandeln und mit dem heutigen vergleichen. Das umgewandelte Datum sollte dann in einem neuen Array stehen. Ich habe verstanden, daß ich dafür die map-funktion brauche, kriege das aber nicht hin. Kann mir jemand helfen?

Vielen Dank

Gruß

Alex
BlackJack

@AlexS_: Was veranstaltest Du denn da mit `SN`? Erst erzeugst Du eine Liste mit den Zahlen 0 bis 9, dann ersetzt die mühsam alle mit einzelnen Zuweisungen, nur um sie gleich darauf *wieder* mit dem Ergebnis von `time.localtime()` zu ersetzen. Was übrigens nur 9 Elemente hat. Und dann baust Du -- wieder recht mühsam -- eine neue Liste, um damit `time.mktime()` aufzurufen. Das geht alles in *einer* Zeile und völlig ohne `SN`:

Code: Alles auswählen

today_in_seconds = time.mktime(time.localtime())
Für das einlesen der Zeilen solltest Du noch einmal schauen welche Methoden Dateiobjekte bieten. Das `split`\ten kann man sich nämlich sparen.

Ausserdem solltest Du Dir die Python-Begriffe angewöhnen -- das was Du immer Array nennst, ist eine Liste.
Antworten