# -*- coding: utf-8 -*- import sys, codecs, math, operator f = open(sys.argv[1], "r") #f = codecs.open(sys.argv[1], "r", "ISO-8859-1") zusiversion = f.readline().strip() if zusiversion != "2.3": print "Version", zusiversion, "wird nicht gelesen" sys.exit() for i in range(0, 2): f.readline() rec_depth = int(f.readline()) #print rec_depth for i in range(0, 4): while not f.readline().startswith("#"): pass elements = {} registers = {} coords = {} while True: elem_nr = f.readline() if elem_nr == "": break else: elem_nr = int(elem_nr) for i in range(0, 4): f.readline() (x1, y1, z1) = (float(f.readline().replace(",", ".")), float(f.readline().replace(",", ".")), float(f.readline().replace(",", "."))) (x2, y2, z2) = (float(f.readline().replace(",", ".")), float(f.readline().replace(",", ".")), float(f.readline().replace(",", "."))) coords[elem_nr] = ((x1+x2)/2, (y1+y2)/2) f.readline() # Überhöhung succ = filter(lambda x: x != 0, [int(f.readline()), int(f.readline()), int(f.readline())]) block = None gleis = None #print elem_nr, coords[elem_nr], succ, (x1, y1, z1), (x2, y2, z2) for i in range(0, 5): f.readline() if not f.readline().startswith("#"): # Fahrstraßensignal while not f.readline().startswith("#"): pass for i in range(0, 3): f.readline() if not f.readline().startswith("#"): while not f.readline().startswith("#"): pass block = f.readline().strip() gleis = f.readline().strip() numzeilen = int(f.readline()) + 1 numspalten = int(f.readline()) + 1 for i in range(0, numzeilen * 5 + numspalten + 1 + numzeilen * numspalten * 6 + 6): f.readline() while not f.readline().startswith("#"): pass f.readline() register = int(f.readline()) if register != 0: if register not in registers: registers[register] = set() registers[register].add(elem_nr) distances = {} for reg in registers: if len(registers[reg]) <= 1: continue maxdist = 0 for el1 in registers[reg]: for el2 in registers[reg]: if el1 != el2: maxdist = max(maxdist, math.sqrt( (coords[el1][0] - coords[el2][0])**2 + (coords[el1][1] - coords[el2][1])**2)) distances[reg] = maxdist sorted_dist = sorted(distances.iteritems(), key=operator.itemgetter(1), reverse=True) print "Register;max. Entfernung in m;Elemente" for (reg, maxdist) in sorted_dist: print str(reg) + ";" + str(maxdist).replace(".", ",") + ";" + str([r for r in registers[reg]])