[Talk-de] seek (perl) in osm dateien

Frederik Ramm frederik at remote.org
Mi Jul 28 11:31:55 UTC 2010


Hallo,

Jacques Nietsch wrote:
> Jeder Algorithmus der mit Blöcken arbeitet ist fehlerbehaftet, da mit
> gewisser Wahrscheinlichkeit eine Blockgrenze mitten in einen Tag fällt.

Du musst einfach nur Blocks lesen, die mindestens zweimal so gross wie 
die groesste Zeile sind, und dann den den naechsten Zeilenwechsel in dem 
Block finden.

> 1: Eine Indexdatei erstellen, die die Positionen der Zeilenanfänge enthält.
> Das kann man mit Perl oder f(lex) machen und sollte sehr schnell gehen.

Wir machen doch den ganzen Eiertanz nur, weil wir eben nicht die ganze 
Datei durchlesen wollen. "Sollte sehr schnell gehen"... der folgende 
Code, der *nichts* mit den Daten macht:

#!/usr/bin/perl

open(P, "planet.osm");
while(<P>)
{
    # nix
}
close(P)

braucht bereits eine gute halbe Stunde. Wenn man einfach nur die Stelle 
finden will, an der die erste Relation oder der erste Way auftauchen, 
dauert das mindestens 20 Minuten. Mit der binaeren Suche und seek() ist 
das in Sekunden erledigt.

Bye
Frederik




Mehr Informationen über die Mailingliste Talk-de