vor langer Zeit habe ich viel mit Turbo-Pascal und Delphi gearbeitet, mache jetzt meine ersten Schritte mit FreePascal und stolperte geradewegs in eine Falle. Folgendes Verhalten kann ich mir nicht erklären:
Eine Textdatei wird zeilenweise ausgelesen und in jeder Zeile wird ein Objekt oMsg mit zwei Strings versorgt. Dies wird mittels Logger 'D' gelogged.
Unter bestimmten Bedingungen wird das so gefüllte Objekt in die Liste geschrieben (Add) und nochmals gelogged ('W'). Dann wird dieses zuletzt hinzugefügte Objekt wieder ausgelesen und angezeigt - sieht auch gut aus, Logger 'I':
Code: Alles auswählen
TRY
Assign(oFile, sPath);
Reset(oFile);
REPEAT
ReadLn(oFile, sLine);
oMsg.key := StrUtils.ExtractWord(1, sLine, oDelims);
oMsg.text := StrUtils.ExtractWord(2, sLine, oDelims);
Logger.GetInstance.PutLog('D', IntToStr(iIndex), oMsg.key + ' - ' + oMsg.text);
IF (NOT StrUtils.AnsiStartsStr('[', oMsg.key)) THEN BEGIN
Logger.GetInstance.PutLog('W', IntToStr(iIndex), oMsg.key + ' - ' + oMsg.text);
oListe.Add(oMsg);
oMsg := oListe[iIndex];
Logger.GetInstance.PutLog('I', IntToStr(iIndex), oMsg.key + ' - ' + oMsg.text);
inc(iIndex);
END;
UNTIL EOF(oFile);
FINALLY
iNum := oListe.Count;
Close(oFile);
END;
Code: Alles auswählen
11.08.2020 20:25:02 - DEBUG: 8 EDIT - Bearbeiten
11.08.2020 20:25:02 - WARNING: 8 EDIT - Bearbeiten
11.08.2020 20:25:02 - INFO: 8 EDIT - Bearbeiten
Code: Alles auswählen
FOR iIndex := 0 TO iNum DO BEGIN
oMsg := oListe[iIndex];
IF (oMsg <> nil) THEN BEGIN
Logger.GetInstance.PutLog('E', IntToStr(iIndex), oMsg.key + ' - ' + oMsg.text);
END;
END;
Code: Alles auswählen
...
11.08.2020 20:25:02 - ERROR: 6 ABOUT_PROGRAM - über das Programm
11.08.2020 20:25:02 - ERROR: 7 ABOUT_PROGRAM - über das Programm
11.08.2020 20:25:02 - ERROR: 8 ABOUT_PROGRAM - über das Programm
...
Ich sitze bereits seit Tagen vor dem Problem, komme aber nicht dahinter.
Vielen Dank im voraus!