Wenn ich das richtig sehe, werden f und g die selbe Datei zugewiesen, dann durchläufst du f von Anfang bis Ende und in jedem Durchlauf(f) durchläufst du g komplett.
Bei jedem Durchlauf(f) wird g erneut geöffnet. Und jedes readLn liest von der Platte. Das kostet natürlich unheimlich Zeit.
Ich würde statt dessen folgender Herangehensweise versuchen.
- Datei öffnen
- Daten in ein passendes Record schreiben
- Record per Quicksort nach Koordinaten sortieren
- Eine Variable "letzteKoords" und ein Array "besterWert/Koord" einführen
- Record durchlaufen und prüfen ob letzteKoords = aktuelle Koords, falls ja, schauen ob aktueller Wert besser, dann im Array speichern
- Zum Schluss alles in eine neue Datei speichern.
GetPosNumX wäre aber wirklich hilfreich.