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

_______________________________________________
Talk-de mailing list
[email protected]
http://lists.openstreetmap.org/listinfo/talk-de

Antwort per Email an