"00:40 Uhr... Weißt du, wo dein Pointer ist?"
Ich bekomme meinen Pointer nicht mehr aus der Liste.
Diese Funktion soll einen Index erstellen, bestehend aus "
ICAO-Code => Datensatz-ID". Dazu nutze ich die csDictionary.pas von alzaimar. Zum Testen habe ich den festen Wert "33" vorgegeben:
Delphi-Quellcode:
procedure TWeatherDatabase.CreateAirportIndex;
var
i,s: Integer;
pi: Pointer;
tmp: String[4];
fAirport: TAirport;
begin
Reset(fAirprtsFile);
s := 33;
for i := 0 to FileSize(fAirprtsFile) - 1 do
begin
Read(fAirprtsFile, fAirport);
tmp := fAirport.ICAO;
pi := @s;
fAirportIndizes.Add(tmp, pi);
end;
end;
Nun möchte ich mir über den ICAO-Code Infos über einen Flughafen ausgeben lassen. Das soll so funktionieren:
Delphi-Quellcode:
function TWeatherDatabase.GetAirportInfo(ICAO: String): TAirport;
var
Airport : TAirport;
pIndex: Pointer;
Index: Integer;
begin
if fAirportIndizes.Find(ICAO, pIndex) then
begin
Index := Integer(pIndex^);
Seek(fAirprtsFile, Index);
Read(fAirprtsFile, Airport);
Result := Airport;
end;
end;
Aber, egal was ich mache (die beiden Funktionen oben sind jetzt mal eine kurze Momentaufnahme, hab schon zig Variationen durch), ich bekomme nicht den Wert 33 raus. Entweder habe ich ein Brett vorm Kopf (Eiche massiv), oder ich mache unbewusst was falsch (was im Nachhinein betrachtet irgendwie dasselbe ist).
Sieht jemand meinen Fehler? Ich bin eigentlich der Meinung, dass ich alles nach Delphi-Hilfe gemacht habe...