Ob es das Performance-Problem ist, weiß ich nicht (habe mich jetzt nicht reingedacht), aber dynamische Arrays starten mit 0 und enden mit High(Dynamisches Array). Wenn du den Rangecheck (-Cr) aktivierst, sollte der Debugger meckern.
Warum ist das in der While Schleife? Macht für mich auf den ersten Blick keinen großen Sinn. Weil sich Text innerhalb der Schleife nicht verändert oder habe ich was übersehen?
Edit01: OK, hat sich geklärt, such mal nach Pointern bzw. PChar das könnte schneller sein.
@Pluto die schleife verschiebt den leser [das ist ein] text der geparsed wird das [ist ein text] der geparsed wird das ist [ein text der] geparsed wird das ist ein [text der geparsed] wird das ist ein text [der geparsed wird] hier mal mit den eckigen klammern dargestelt
@Michl ok werde ich mal versuchen
Edit: Ok die änderung auf high hats mal so um ne menge beschleunigt, läuft jetzt in so sofort durch. Was ist an high anders.
Edit2: aber er scheint die while schleife nicht zu verlassen weil er den debugoutput nicht ausgibt
Zuletzt geändert von Dragon am Sa 14. Mai 2016, 20:03, insgesamt 1-mal geändert.
Es gibt einen eingabe text der länge n dieser wird immer in dreierblöcken erfasst wie hier dargestellt und in ein array of record eingetragen [das ist ein] text der geparsed wird das [ist ein text] der geparsed wird das ist [ein text der] geparsed wird das ist ein [text der geparsed] wird das ist ein text [der geparsed wird] wenn so ein dreierblock mehr als einmal identisch vorkommt, wird kein neuer eintrag im array of record angelegt, sondern der zähler um 1 erhöht, der für jedes dreierpacket seperat vorhanden ist, innerhalb des array of record
if i =1then begin for w :=1to3do begin t1 := PosEx(' ', text , start); wort[w]:= copy(text, start, t1-start); start := t1 +1; end; end else begin wort[1]:= wort[2]; wort[2]:= wort[3]; t1 := PosEx(' ', text , start); wort[3]:= copy(text, start, t1-start); start := t1 +1; end;
MfG Gocher akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me
found :=false; if length(database)>0then begin for i2 :=0to length(Database)-1do begin if(Database[i2].Wort1= wort[1])and(Database[i2].Wort2= wort[2])and(Database[i2].Folgewort= wort[3])then begin inc(Database[i2].Anzahl); found :=true; break; end; end; end; ifnot found then begin t2 := length(Database); Setlength(Database, t2 +1); Database[t2].Wort1:= wort[1]; Database[t2].Wort2:= wort[2]; Database[t2].Folgewort:= wort[3]; Database[t2].Anzahl:=1; end;
MfG Gocher akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me
sl := TStringList.Create; sl.Delimiter:=' '; // Leerzeichen als Wort Trenner sl.QuoteChar:= #$0; // keine " als Maskierung sl.DelimitedText:= Text; // durch diese Zuordnung wird der Zugewiesene Text in einzelne Strings // (Worte in diesem Fall unterteilt) // dann kannst du dir alles ausschneiden ersparen t2 := length(Database); for i:=0to sl.Count-3do // die Schleife beginnt bei 0 (erstes Wort) und aus den letzten zwei Worten kannst Du keine // dreierkombinationen machen das würde zu Zugriffsverletzungen führen begin found :=false; if t2>0then begin for i2 :=0to t2-1do begin if(Database[i2].Wort1= sl.strings[i])and(Database[i2].Wort2= sl.strings[i+1])and(Database[i2].Folgewort= sl.strings[i+2])then begin inc(Database[i2].Anzahl); found :=true; break; end; end; end; ifnot found then begin Setlength(Database, t2 +1); Database[t2].Wort1:= sl.strings[i]; Database[t2].Wort2:= sl.strings[i+1]; Database[t2].Folgewort:= sl.strings[i+2]; Database[t2].Anzahl:=1; t2 := length(Database); end; end; sl.Free;
Zuletzt geändert von gocher am So 15. Mai 2016, 16:25, insgesamt 6-mal geändert.
MfG Gocher akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me
wieso rechnest du bei der stringliste in der schleife -3. und kann man da überhaupt mit einer stringliste arbeiten ich meine muss dann jedes wort nicht in einer extra zeil vorliegen?
Edit1:
Danke für die erweiterten kommentare habs so mal probiert das programm crasht dann aber mit "EStringListError: List index (416) out of bounds"
Zuletzt geändert von Dragon am So 15. Mai 2016, 16:07, insgesamt 2-mal geändert.