ich brauche ein paar Anregungen zu folgendem Problem:
- Es gibt (seit langem) ein Delphi-Programm in der Firma, das genutzt wird, um FEM-Ergebnisse weiter zu verarbeiten. Die Ergebnisdateien sind groß (bis zu mehreren GB) und es müssen Daten aus mehreren gleichzeitig verarbeitet werden. Das Handling ist momentan eher weniger optimal (es wird mehr Zeit mit dem Lesen der Daten als mit deren Verarbeitung vertan). Ich versuche das nun zu verbessern (es gibt mittlerweile ja größere, schnellere Rechner ).
- Die Files sind ASCII-Files und bestehen aus verschiedenen Sektionen unterschiedlicher Größe und Aufbau (das wird "Postcode" genannt), so dass man irgendwie durch das ganze File durch muss, um die Daten (Postcodes) zusammenzutragen; meine Idee, diese Sektionen zu identifizieren, einzulesen und die Daten gleich in entsprechende Strukturen zu speichern (es werden nicht alle Sektionen gebracht).
- Für meine Versuche in Lazarus (zuhause) habe ich erstmal platterweise so ein File als ganzes in eine TStringList eingelesen; ein solches File passte auch problemlos in meinen (Linux-)Rechner. Die TStringList konnte man dann recht einfach mittels Index durchlaufen und auswerten. Das funktioniert unter Delphi/Windows leider nicht ("not enough memory" wohl weil noch 32-bit-ig(*)) beim sl:=StringList.Create; sl.LoadFromFile(..);.
- Deshalb versuche ich, die Files mittels TFileStream zu lesen, was prinzipiell funktioniert; ich kann das File Zeile für Zeile einlesen und diese dann weiterverarbeiten: erstmal nur nach den Postcodes suchen. Soweit funktioniert es.
- Wenn ein Postcode gefunden ist, der ausgewertet werden soll, würde ich gerne eine Funktion damit beauftragen. Hier die Frage: kann ich den Stream an die Funktion weitergeben, so dass die dort weiter parsen kann? Und kann ich die Position im Stream am Ende zurück geben, so dass ich weiter suchen kann und von dort die nächste Postcode-Auswerteroutine aufrufen kann? Ich möchte vermeiden, jedesmal den Stream neu zu öffnen und wieder von vorne zu beginnen.
- Gibt es noch andere Herangehensweisen? Stichworte zum Nachlesen reichen.
Photor
PS: wenn Codeschnipsel gewünscht werden, kann ich was extrahieren und anpassen.
(*) Umstellung auf 64 Bit wird sicher auch irgendwann kommen, ist aber für den Moment eine zu große Baustelle.