@quant: Kannst du mal präzise deine Probleme beschreiben - mit "Der macht ärger", "geht nicht" etc. kann niemand was anfangen.
Hast du noch Probleme mit dem Ablauf?
1. finde eine Zeile die mit "0" fängt (nicht mit 0 oder " 0" oder "\t0")
2. in der nächsten Zeile kommt jetzt:
- die Anzahl an 'incoming'-Zeilen im Zeichen 0, d.h. im ersten Zeichen
- die Anzahl an 'outgouing'-Zeilen, Zeichen 1 bis 8 (woher weiß ich das?)
3. die nächsten Zeilen (wieviele?) sind incoming-Zeilen, die Zahl, die du hier suchst steht an Zeichen 149 bis 159, bzw. in Python "aktuelle_zeile[149:160]"
4. die nächsten Zeilen sind 'outgoing'-Zeilen -- Die können auch fehlen
weiter zu 1.
Arbeite auf jeden Fall das Tutorial durch - offiziell in englisch in der/deiner Python-Documentation, oder (IIRC im Python-Wiki) auf Deutsch.
hth. Jörg
Einlesen von regelmäßig ungleichen zeilen
- b.esser-wisser
- User
- Beiträge: 272
- Registriert: Freitag 20. Februar 2009, 14:21
- Wohnort: Bundeshauptstadt B.
Wir haben schon 10% vom 21. Jahrhundert hinter uns!
hey
also ich hab folgendes problem ... in der ENTRY_OUT schleife ist die outgoing variable aus mir unverständlichen gründen 0, obwohl sie vorher noch die richtige zahl hat, welche ich vorher ja einlese
ansonsten ist mir die logic schon klar vom ganzen
also ich hab folgendes problem ... in der ENTRY_OUT schleife ist die outgoing variable aus mir unverständlichen gründen 0, obwohl sie vorher noch die richtige zahl hat, welche ich vorher ja einlese
Code: Alles auswählen
# /usr/bin/python
# coding:utf-8
import pprint
DATAFILE = "fort.15"
# 'enum' is sometimes dearly missed
SCAN, ENTRY_HEAD, ENTRY_IN, ENTRY_OUT = range(4)
def main():
#to hold all extracted data,
events = []
state = SCAN
with open(DATAFILE) as data_fd:
for line in data_fd:
if state == SCAN and line[0] == "0":
incoming = outgoing = 0
state = ENTRY_HEAD
elif state == ENTRY_HEAD or \
(state == SCAN and line[0] in "123456789"):
#prepare counter
if line[0] in "123456789" and not line[2:9] in "0":
incoming,outgoing = int(line[0:1]), int(line[2:9])
#create new entry
events.append( dict(incoming=[], outgoing=[]) )
#local shortcuts (I'm a lazy typist)
in_tmp = events[-1]["incoming"]
out_tmp = events[-1]["outgoing"]
# select next state
state = ENTRY_IN if incoming else ENTRY_OUT
elif state == ENTRY_IN:
# in_tmp.append(int(line[156:160]))
incoming -= 1
# print outgoing
if not incoming:
state = ENTRY_OUT
elif state == ENTRY_OUT:
# out_tmp.append(int(line[149:161]))
print outgoing # hier ist sie 0...
outgoing -= 1
if not outgoing:
state = SCAN
else:
# # print "impossible state:", state
raise IOError("file wrongly formatted")
for data in events:
pprint.pprint(data)
if "__main__" == __name__ : main()
- b.esser-wisser
- User
- Beiträge: 272
- Registriert: Freitag 20. Februar 2009, 14:21
- Wohnort: Bundeshauptstadt B.
line[2:9] in "0"
funktioniert definitiv nicht - probier's im interpreter aus
int(line[2:9]) == 0
geht wahrscheinlich besser.
Aber: Gib doch besser das Ergebnis nach den Incoming-Zeilen aus, wenn outgoing==0 ist, und überspring "ENTRY_OUT" einfach.
funktioniert definitiv nicht - probier's im interpreter aus
int(line[2:9]) == 0
geht wahrscheinlich besser.
Aber: Gib doch besser das Ergebnis nach den Incoming-Zeilen aus, wenn outgoing==0 ist, und überspring "ENTRY_OUT" einfach.