Moin.
Ich nutze Lazarus auf einem Raspberry 3.
Problem:
Beim Auslesen der Wetterdaten von Openweathermap (Json-formatiert) werden die Daten alle korrekt aufgelistet.
Die ausgelesenen Felder bzw. die Abfragen in einer Schleife sind jeweils identisch, bis auf Ereignisse wie z. B. Regen oder Schnee, die nur sporadisch auftreten. somit ist auch kein Feld mit solch einem Wert existent.
Trifft nun die Abfrage auf solch ein nicht vorhandenes Feld, wird als Fehler folgendes ausgegeben:
Projektsteuerung hat Exception-Klasse »External: SIGSEGV« ausgelöst.
In Datei 'xxx.pas' in Zeile 717: Wind := jData.FindPath('list['+IntToStr(Schleifenzaehler)+'].rain.3h').AsString;
Da der Fehler sofort auftritt, klappt eine Fehlerroutine nicht, da wohl der Pointer nicht initialisiert wird.
Der Versuch mit try und except schlägt fehl, gleiche Meldung.
Abfrage auf nil klappt nicht (if nil usw.).
Gibt es eine Lösung dafür?
Ich bin leider nicht so firm mit der Syntax von Pascal, eher mit C.
Laufzeitfehler dynamisches Array
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1647
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: Laufzeitfehler dynamisches Array
Doch, der Vergleich mit nil muß gehen weil findpath eben diesen zurückgibt, falls der gesuchte Pfad nicht gefunden wurde. Du musst den nur auch prüfen bevor du darauf zugreifst.
Code: Alles auswählen
if Assigned(jData.FindPath('list['+IntToStr(Schleifenzaehler)+'].rain.3h')) then
Wind := jData.FindPath('list['+IntToStr(Schleifenzaehler)+'].rain.3h').AsString;
-
- Beiträge: 29
- Registriert: Mo 15. Mär 2021, 14:09
- OS, Lazarus, FPC: Lazarus-Ide 2.0.0 auf Debian Raspberry Pi3
- CPU-Target: Msp430, Raspberry
- Wohnort: bei Itzehoe
Re: Laufzeitfehler dynamisches Array
Danke.
"Assigned" hatte mir gefehlt, klappt.
"Assigned" hatte mir gefehlt, klappt.