Beste Weg zum Lesen und schreiben einer Textdatei
Ich bin mit der neuesten version der Lazarus-IDE und ich haben eine Memo1
auf meine TForm1. Ich habe zum laden einer text-Datei in Memo1
und Bearbeiten Sie anschließend jede Zeile des Memo (ich benutze Memo1.Lines.Strings[i] := ...
). Am Ende muss ich speichern Sie die bearbeitete memo zu einem bestimmten Pfad.
Frage: ich bin auf der Suche nach der schnellere Weg zwischen:
- Laden Sie den gesamten text in der memo, deren Inhalt Bearbeiten und speichern in eine neue Datei (load-all -> Bearbeiten -> write all)
- Tun
while
Schleife (bis zum Ende meiner*.txt
Datei) liest die Datei zeilenweise Bearbeiten Sie den Inhalt und speichern Sie es in die neue Datei. (load line -> Bearbeiten -> schreib - | laden -> Bearbeiten -> schreiben | laden-Zeile -> Bearbeiten -> schreiben | ...)
Ich bin ziemlich neu in Delphi entwickelt, und ich habe auch gelesen, einige Seiten über TStringLists
. Meine text-Datei ist eine Menge von Linien (Er hätte 5000+ Zeilen), und ich will nicht, dass mein Programm verliert Leistung.
Jede Anregung? Sollte ich TStringList
oder eine der beiden Methoden, die ich aufgelistet vor?
- Bearbeiten Sie (eigentlich eingeben, um den text zu ändern) in dem memo? Wenn dem so ist, laden, Bearbeiten und speichern. Wenn nicht, verwenden Sie einfach ein
TStringList
statt, da brauchen Sie nicht den overhead einer GUI-Steuerung. - Das Programm hat zum Bearbeiten jeder Zeile hinzufügen einige zahlen am Ende oder am Anfang der Zeile. Nicht der Benutzer muss nichts eingeben.
- Ist es ein wenig albern zu laden, einige Daten in der GUI kontrollieren und tun sich nichts in der GUI Zweck? Was denkst du?
- Ich mache das, weil ich habe, um zu sehen, was macht das Programm in der Schleife. Ich weiß, was du meinst, aber das ist nur ein "feature" ich Teste für mein Programm. Vielen Dank für die Ratschläge sowieso.
- Ich glaube nicht, was die Beurteilung von tausenden von Textzeilen ist wirklich eine gute Möglichkeit zu testen, einen bestimmten Vorgang. Die echte Beratung: stellen Sie sicher, was Sie haben
filesize * 2
bytes freier Speicher zu nutzenTStrings
verwenden, sonst vertauschen, wird es sehr langsamer als line-by-line. - definitiv nicht doppelt!
- Einfügen von zusätzlichen Symbolen in der Mitte der Saiten Kräfte kopieren, den rest des Textes weiter und weiter in den Speicher immer wieder und die Skalierung als N^2. Schneller code in der Füllung frische neue TStringBuilder (mit memory pre-allocation) oder ein Array Von String aus der Datenquelle. Aber in dieser situation HDD Lesen-schreiben wäre mehr als die Begrenzung RAM Lesen-schreiben-trotzdem.
- Berücksichtigen Sie auch memo1.Linien.beginupdate, um es schneller zu machen
Du musst angemeldet sein, um einen Kommentar abzugeben.
5000
Linien ist nicht viel, es sei denn, die Saiten sind sehr lang.Der einfachste Weg ist die Verwendung eines
TStringList
. Es gibt keine Notwendigkeit zur Verwendung eines GUI-Steuerelement, es sei denn, der Benutzer braucht, um zu sehen oder Bearbeiten Sie den Inhalt.Wenn (wie du sagst in einem Kommentar oben), müssen Sie dies tun, in einem
TMemo
für Testzwecke können Sie auf dieselbe Art und Weise:Natürlich, der einfachste Weg, dies zu tun wäre zu schreiben Sie eine Prozedur akzeptiert einen einfachen
TStrings
Nachkomme jeglicher Art:Dann rufen Sie es entweder mit einem:
for
Schleife. Ich in der Regel nicht nur als eine Gewohnheit in meinem eigenen code, weil ich in der Regel mehr als nur eine Zeile, die ausgeführt wird. Wenn Sie nicht sicher sind, ist es immer besser, Sie zu benutzen. Ich werde Bearbeiten, um Sie hinzuzufügen, obwohl; es ist eine bessere Gewohnheit zu haben.