Hallo AutoIT-Community,
ich stehe bei einem aktuellen Projekt vor der Aufgabe große (500+ MB / 5Mio+ Zeilen) Dateien (=Datenbank) einzulesen und relevante Daten in einem Array abzuspeichern. Im Vornherein sei also gesagt, dass ich nicht die gesamte Datei im Arbeitsspeicher brauche. Fakt ist, dass meine bisherigen Versuche an verschiedenen Dingen scheiterten. Hauptsächlich aber an der benötigten Zeit.
Meine bisherigen Ansätze waren:
- FileReadToArray - Ich habe die gesamte Datei versucht einzulesen um sie dann im Arbeitsspeicher zu untersuchen.
Gescheitert an: Das Skript ist irgendwann abgestürzt. Vermutlich weil AutoIT mit der Datenmenge nicht umgehen konnte. RAM war um ein vielfaches der Dateigröße ausgelastet. - FileRead / FileReadLine - Ich habe die Datei als Handle, und dann zeilenweise eingelesen. Hierbei ging ich schrittweise vor, sodass er ressourcensparend immer nur 1000 Zeilen im RAM hat.
Gescheitert an: Benötigte Zeit (~30 Minuten). Generell ist bei vielen Zeilen FileReadToArray deutlich im Vorteil. Somit ist das Skript super langsam wenn es jede Zeile einzeln einliest.
Mit meinen (zusammengefasst) zwei Ansätzen hatte ich also bisher keinen Erfolg. Mein neuer Ansatz wäre komplett die Dateien in kleine (10MB) Portionen aufzuteilen und einzeln per FileReadToArray einzulesen. Dieser Lösungsweg ist mir aber nicht so lieb, da ich gerne ein übersichtliches Daten-System pflege, ohne hundert von ähnlichen Dateien.
Hat jemand von euch vielleicht ein effektiveren Ansatz parat? Ich bin über jede Hilfe dankbar!
Freundliche Grüße!