[Programación]Alguna forma fácil de convertir formatos...

Fabian Ezequiel Gallina galli.87 en gmail.com
Vie Feb 12 11:38:12 ART 2010


El día 12 de febrero de 2010 11:14, Horacio Castellini
<horacio9573 en yahoo.com.ar> escribió:
>> > El Vis Server de una mesh me
>> manda la tabla de dígrafos en el formato:
>> >
>> > digraph topology
>> > {
>> > "IP_origen" ->
>> "IP_destino"[label=potencia_en_unidades_vis]
>> > }
>> >
>> > Por ejemplo:
>> >
>> > digraph topology
>> > {
>> > "5.219.82.43" -> "5.174.117.226"[label="1.03"]
>> > "5.219.82.43" -> "5.170.250.244"[label="1.00"]
>> > }
>> >
>> > Existe alguna manera en Python, PERL, para llevarlo a
>> un formato de tres
>> > columnas en ASCII y sin los caracteres raros?
>>
>> no podes reemplazar los caracteres " -> " , "[label="
>> etc por |
>> --
>
> Si puedo hacer un script en bash con "sed",  y que me boore todo eso, pero la idea no es esa... la forma peculiar que lo manda me da la idea que es algo estandar y que deben existir bibliotecas que lo porcesen...
>

Podés basar tu código en el parser que armé para el mapa de los
hotspots del wifidog[0].

[0] http://my-trac.assembla.com/lugro-mesh/browser/trunk/wifidog/wifidog-auth/classes/Nightwing/NightwingVISParser.php#L118

En python sería así (excerpt de bludhaven):

    def parse(contents):
        """Parses the retrieved VIS dump"""
        # blank at the beginning of line
        pattern = r'.*'
        # router ip address
        pattern += r'"(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}){1}'
        # garbage
        pattern += r'[^\"]*"\s*->\s*'
        # neighbour ip address
        pattern += r'"(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}){1}'
        # garbage
        pattern += r'[^\"]*"\s*'
        # label
        pattern += r'\[label="([^"]+)"\]\s*'
        # end
        pattern += r';?\s*\n'
        pattern = re.compile(pattern)
        matches = re.findall(pattern, contents)
        parsed = []
        for match in matches:
            parsed.append(
                {
                    'router': match[0], 'router_id': Parser.ip_2_id(match[0]),
                    'neighbour': match[1], 'neighbour_id':
Parser.ip_2_id(match[1]),
                    'label': match[2]
                }
            )
        return parsed



Saludos,
-- 
Fabián E. Gallina
http://www.from-the-cloud.com


Más información sobre la lista de distribución Programacion