Das ist ganz schön krass was du da zusammen würfelst. Unabhängig davon ob deine Logik funktioniert erzeugst du mit dem Beispiel AnzahlZeilen x AnzahlSpalten
Speicherlecks!
Denn du erstellst innerhalb der Schleife jedesmal ein Objekt. Mit nächstem Durchlauf überschreibst du gnadenlos die Referenz. Und nach der Schleife gibst du nur ein Objekt frei?
Und das ganze sogar zweimal...
Setze mal mit dem Anwendungsstart (
DPR)
ReportMemoryLeaksOnShutdown := true
und lass deine Funktion durchlaufen und beende dein Programm anschließend (wenn dies überhaupt ohne Zugriffsfehler möglich ist).
Wenn du gar nicht begreifst was ich meine dann starte mal deine Funktion 20 mal und schau dir im Taskmanager die Speicherauslastung an.
Und wenn du jetzt sagst, was solls... Speicheranforderungen sind Systemaufrufe und die kosten viel viel Zeit! Und das in einer Schleife?
Und wieso erstellst du die Objekte oberhalb vom try-finally-Block? Und woher willst du im finally-Block wissen, dass alle Objekte auch wirklich existieren?
Was ist deine Zieldatei nicht existiert oder das ganze inmitten der Schleifen abbricht?
Worauf zeigt dann MyIterator? Und worauf die Methode Free ()? Oder anderen Sachen?
Vielleicht geht alles noch beim Lesen der Datei irgendwie gut. Jedoch wenn du auf deinem System irgendwann nur noch halbe Dateien findest solltest du dich nicht wundern.
Du solltest dir eine Funktion explode ('delimiter', 'content') schreiben die möglichst gar keine Objekte verwendet und nichts anderes macht als einen String in Teile zu zerlegen.