-
Forum: Programmieren allgemein
by Ginko,
23. Mai 2013
Hier ist mal noch die Variante für ReadLn, angepasst mit der Struktur ähnlich der von Furtbichler. Es gibt jetzt von der Geschwindigkeit keinen Unterschied mehr zur MMF-Klasse, jedenfalls für meine Anwendung.
Testdatei: 56MB Text
ReadLn Version: 3141349 Funde, Zeit: 1468ms
MMF-Klasse Version: 3139069 Funde, Zeit: 1438ms (wegen oben beschriebenen Problems weniger Funde, deshalb wahrscheinlich...
-
Forum: Programmieren allgemein
by Ginko,
23. Mai 2013
Ok das war ein Missverständnis, besser lesbar wird er so ja.
aye aye, sir :mrgreen:
Den Teil hatte ich schon ausprobiert, allerdings wollte ich das "kleine Problem" nicht gleich mit einer neuen Unit erschlagen. Muss man auch nicht wenn man bauminas ersten Vorschlag etwas anpasst, dann hat man eine schnelle und einfache Lösung.
Gut Jänicke's MMF-Teil ist noch ein wenig schneller, aber...
-
Forum: Programmieren allgemein
by Ginko,
22. Mai 2013
@Furtbichler Danke für den Hinweis, allerdings konnte mit der Funktion keinen wesentlichen unterschied merken, auch ca 36s für die Suche von ca 2200 Wörtern.
Das werd ich mal noch versuchen Danke für die Antworten nochmal. Hab den Beitrag grad übersehen...
-
Forum: Programmieren allgemein
by Ginko,
21. Mai 2013
So ich habs mal mit dem Filestream gemacht. Das geht gar nicht, also von der Geschwindgkeit her ...
Bei einer Textdatei von 8Mb brauchte das ca 36s, mit ReadLn und angepassten TextBuffer hingegen nur ca 65ms.
var
FileStrm1: TFileStream;
Ch: Char;
GesLength: Integer;
Gesucht,Seite: String;
StrList1: TStringList;
begin
Gesucht:= ( UTF8Decode( Edit1.Text ) );
-
Forum: Programmieren allgemein
by Ginko,
21. Mai 2013
Ich schau mir das mal noch genauer an. Muss jetzt aber erstmal weg. Danke bis hier für die ANtworten.
-
Forum: Programmieren allgemein
by Ginko,
21. Mai 2013
Ja es soll im ganzen Text gesucht werden, Missverständnis.
Allerdings soll bei einem Fund, Informationen vom Ende der Seite (Seitenzahl etc.) an das Suchergebnis angehängt werden. Deshalb brauch ich bei ReadLn immer den Abschnitt bis zum Ende einer Seite... (Weil ich die Datei Zeilenweise durchsuche).
Meine obige Lösung mit Stringreplace ist nur ein Übergangslösung. Für die reine Suche reicht...
-
Forum: Programmieren allgemein
by Ginko,
21. Mai 2013
Dann hätte ich 200MB Speicherverbrauch wenn ich die ganze Datei in eine Stringlist laden würde...
-
Forum: Programmieren allgemein
by Ginko,
21. Mai 2013
Es soll auf der Seite im Text gesucht werden, allerdings benötige ich zum Suchergebnis zusätzlich Informationen, die am Ende einer Seite stehen, dehalb soll immer eine ganze Seite eingelesen werden.
Ich habe es jetzt erstmal so gelöst das ich einfach mal alle Linebreaks mit StringReplace gelöscht habe und nur das § Zeichen (bzw #12) durch einen Linebreak ersetzt habe. Allerdings geht mir dann...
-
Forum: Programmieren allgemein
by Ginko,
21. Mai 2013
var
FileStrm1: TFileStream;
tmpStr1, SuchWort: String;
len: Cardinal;
startpos: Integer ;
begin
FileStrm1:= TFileStream.Create(Dateiname,fmOpenRead or fmShareCompat);
try
SuchWort:= Edit2.Text
SetLength(tmpStr1, Length(SuchWort));
-
Forum: Programmieren allgemein
by Ginko,
21. Mai 2013
Ist es bei TFileStream und Co-Methoden auch möglich mit Textdateien so zu arbeiten, dass nicht die ganze Datei in den Speicher geladen wird ?
-
Forum: Programmieren allgemein
by Ginko,
21. Mai 2013
Also wenn sie fertig ist sollte sie so an die 200Mb sein. Vielleicht eher nur groß ...
Stringliste sollte dann rausfallen...
-
Forum: Programmieren allgemein
by Ginko,
21. Mai 2013
Die Textdatei resultiert aus der Umwandlung einer PDF-Datei in Text und sieht wie folgt aus.
Zeilentext #13#10
Zeilentext #13#10
...
§Zeilentext #13#10
Zeilentext #13#10
...
§Zeilentext #13#10
Zeilentext #13#10
...
-
Forum: Programmieren allgemein
by Ginko,
21. Mai 2013
Danke für die Antworten !
Ja so könnte eine Seite aussehen.
Stimmt so könnte ich es machen.
Wäre es auch möglich ReadLn umzuschreiben (also ein eigenes ReadLn zu schreiben) und wäre das dann schneller im einlesen, wenn man nur das entprechende Zeichen einsetzt ?
-
Forum: Programmieren allgemein
by Ginko,
21. Mai 2013
doppelpost sorry
-
Forum: Programmieren allgemein
by Ginko,
21. Mai 2013
Nein, es sind mehrere Seiten in einer Textdatei (ein paar tausend Seiten), die ich gerne jeweils einzeln einlesen würde . Die Seiten haben auch LineBreaks aber ich möchte immer eine Seite komplett laden. Deshalb habe ich gedacht ich markiere Anfang unde ENde einer Seite mit einem speziellen Zeichen, welches dann als Anfang bzw. Ende des Buffers gilt, der mit ReadLn eingelesen wird.
-
Forum: Programmieren allgemein
by Ginko,
21. Mai 2013
Hallo,
Gibt es eine Möglichkeit das Zeichen, welches ein Zeilenende markiert, selbst zu bestimmen.
Es geht dabei um das Zeilenweise einlesen einer Textdatei mit ReadLn. Also ich meine so etwas wie SetLineBreakStyle nur für ein eigenes Zeichen. (Die Textdatei ist sehr groß deshalb wollte ich zeilenweise einlesen)