[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