![]() |
Problem mit If schleife ...
Hallo, im folgenden Source lese ich eine Textdatei aus, bestimmte Strings möchte ich ( Wenn sie nicht schon in der ListView stehen ) in ein listView adden. Jedoch scheitere ich, warum auch immer *gg , an der abfrage ob dieser String schon geaddet wurde.
Delphi-Quellcode:
// logfile auf "[Time] [Tag] und String" durchsuchen
function ReadString(path : string) : string; const searchstring = '[blaaaa] + bluuuub bluuuub:'; var gefunden : boolean; list, newlist : TStrings; z1,datum,release : string; i,a,p1,p2 : integer; begin list := TStringList.Create; newlist := TStringList.Create; list.LoadFromFile(path); // Release parsen for i := 0 to list.Count-1 do begin p1 := Pos(searchstring,list[i]); if p1 = 0 then continue; z1 := list.Strings[i]; p1 := Pos('[',z1); // first Time String auslesen p2 := Pos(']',z1); // last Time String auslesen datum := Copy(z1,p1+1,(p2-p1)-1); p1 := Pos(searchstring,z1); z1 := Copy(z1,p1+length(searchstring)+1,length(z1)); p2 := Pos(' ',z1); release := Copy(z1,1,p2-1); // Release schon geaddet? begin for a := 0 to list.Count-1 do if newlist.Count <> 0 then begin if newlist.Strings[a] = (datum+' '+release) then begin gefunden := true; break; end; gefunden := false; end; if not gefunden then newlist.Add(datum+' '+release) end; result := newlist.CommaText; list.free; newlist.free; end; end; thnx für eure hilfe [edit=sakura] Code durch [Delphi]-Tags ersetzt. Mfg, sakura[/edit] |
Re: Problem mit If schleife ...
Mit
Delphi-Quellcode:
wird das Eintragen von doppelten Strings in eine sortierte Stringlist einfach ignoriert!
newlist.Sorted:=True;
newlist.Duplicates:=dupIgnore; mfg Tanadirian |
Re: Problem mit If schleife ...
Das heißt
IF-Bedingung Schleifen sind... - for - while - repear .. until weiter Bedingung: case |
Re: Problem mit If schleife ...
hmm, trotz Sorted und duIgnore added er aber doppelte einträge in der ListView?!
|
Re: Problem mit If schleife ...
Delphi-Quellcode:
Vielleicht mußt du sie ja auch als TStringList deklarieren? Ich weis nicht ob das so auch ok ist!
list, newlist : TStrings;
mfg Tanadirian |
Re: Problem mit If schleife ...
Ich habs als StringList deklariert, jedoch added er immer noch die Dupes :/
|
Re: Problem mit If schleife ...
das is einfach:
Code:
if liste.IndexOf('string') = -1 then
liste.add('string'); |
Re: Problem mit If schleife ...
Würde mich nun aber auch mal Interessieren warum er trotz
Code:
doppelte Strings added.
var
newlist : TStringList; begin newlist.Sorted:=True; newlist.Duplicates:=dupIgnore; ....... |
Re: Problem mit If schleife ...
Hallo,
vielleicht fehlt
Delphi-Quellcode:
newlist.CaseSensitive := False;
|
Re: Problem mit If schleife ...
Nein, habe ich auch schon getestet. ich poste nochmal die ganze funktion, vieleicht liegt der fehler ja sonstwo ...
Delphi-Quellcode:
// logfile auf "[Time] [Tag] und String" durchsuchen
function ReadString(path : string) : string; const searchstring = '[bla] + blaa bluuuub:'; var list, newlist : TStringList; z1,datum,release : string; i,p1,p2 : integer; begin list := TStringList.Create; newlist := TStringList.Create; // StringList sortieren und keine doppelten Strings hinzufügen newlist.Sorted := True; newlist.Duplicates := dupIgnore; newlist.CaseSensitive := False; list.LoadFromFile(path); // Release parsen for i := 0 to list.Count-1 do begin p1 := Pos(searchstring,list[i]); if p1 = 0 then continue; z1 := list.Strings[i]; p1 := Pos('[',z1); p2 := Pos(']',z1); datum := Copy(z1,p1+1,(p2-p1)-1); p1 := Pos(searchstring,z1); z1 := Copy(z1,p1+length(searchstring)+1,length(z1)); p2 := Pos(' ',z1); release := Copy(z1,1,p2-1); newlist.Add(datum+' '+release) end; result := newlist.CommaText; list.free; newlist.free; end; |
Re: Problem mit If schleife ...
@sharkx: Nutze mal statt der [code]-Tags die [delphi]-Tags.
Danke, ...:cat:... |
Re: Problem mit If schleife ...
Hallo sharkx,
kann es sein, dass Du diese Funktion mehrmals hintereinander aufrufst? Wenn ja, dann ist klar, dass Deine Funktion immer die gleichen Ergebnisse mehrfach als String zurückgibt. (Du zerstörst die Stringlist ja jedesmal, und erzeugst sie immer neu) Ansonsten scheint die Funktion zu Funken (bei einmaligem Aufruf). |
Re: Problem mit If schleife ...
Die funktion steht in einer endlosschleife, ja ...
Hmmm, wie löse ich dann am besten das Problem? |
Re: Problem mit If schleife ...
Indem Du die Stringliste ausserhalb Deiner Funktion erzeugst.
|
Re: Problem mit If schleife ...
hallo,
App, irgendwie versteh ich das nicht so ganz. Ich soll die StringList auserhalb der Funktion erzeugen. Wo bzw wie soll ich die erzeugen? |
Re: Problem mit If schleife ...
Hallo sharkx,
falls ich Dich richtig verstanden habe, dann meinte ich in etwa so:
Delphi-Quellcode:
Das ist nur ein Ansatz, Du kannst "newlist" auch als Parameter mitgeben,
PROCEDURE TForm1.Button3Click(Sender: TObject);
VAR NewList : TStringList; j : Integer; // logfile auf "[Time] [Tag] und String" durchsuchen FUNCTION ReadString(path: STRING): STRING; CONST searchstring = '[bla] + blaa bluuuub:'; VAR list : TStringList; z1, datum, release : STRING; i, p1, p2 : integer; BEGIN list := TStringList.Create; list.LoadFromFile(path); // Release parsen FOR i := 0 TO list.Count - 1 DO BEGIN p1 := Pos(searchstring, list[i]); IF p1 = 0 THEN continue; z1 := list.Strings[i]; p1 := Pos('[', z1); p2 := Pos(']', z1); datum := Copy(z1, p1 + 1, (p2 - p1) - 1); p1 := Pos(searchstring, z1); z1 := Copy(z1, p1 + length(searchstring) + 1, length(z1)); p2 := Pos(' ', z1); release := Copy(z1, 1, p2 - 1); newlist.Add(datum + ' ' + release) END; result := newlist.CommaText; list.free; END; BEGIN NewList := TStringList.Create; TRY // StringList sortieren und keine doppelten Strings hinzufügen NewList.Sorted := True; NewListt.Duplicates := dupIgnore; NewList.CaseSensitive := False; // Deine "Endlosschleife" FOR j := 0 TO 10 DO BEGIN Memo1.Clear; Memo1.Lines.add(ReadString('C:\LB.txt')); END; beep; FINALLY NewList.Free; END; END; wenn Deine Funktion keine Unter-Funktion sein soll. Oder Du kannst "newlist" global deklarieren... Auf alle Fälle sollte deine Funktion immer mit der Stringliste arbeiten die vorher einmal erzeugt wurde. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz