also ich hab mal versucht den code zu verstehen was mir auch glaub ich gelungen ist ... nun hab ich einige probleme wo ich vlt hilfe brauch
er macht immer ärger wenn ich den flag setzen will für incoming und outgoing in zeile 28... da versteh ich das problem nicht
ab zeile 30 muss ich neu sortieren damit nur die zeilen welche nicht header und nicht event und natürlich auch nur incoming sind erfasse, irgendwie fällt mir da aber nix ein ich hab schon viel rumprobiert aber entweder läuft es garnicht oder er erfasst immer alle zeilen
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
state = ENTRY_IN
elif state == ENTRY_IN:
#pass
if line[6:22]:
print line[6:22]
# print type(int(line[156:160]))
# in_tmp.append(int(line[156:160]))
# incoming -= 1
# if not incoming:
# state = ENTRY_OUT
# elif state == ENTRY_OUT:
# out_tmp.append(int(line[149:161]))
# 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()