![]() |
Stringlisten vergleichen
Moin Moin.
Ich möchte muss 2 Listen vergleichen um herauszufinden was in der einen Liste fehlt
Delphi-Quellcode:
Alles läuft bis zu dem Moment wo ich CopyList speichern will : Zuwenig Arbeitsspeicher. Was??
var
I,II:Integer; Str : String; CurrentList : TStringlist; DDSList : TStringList; CopyList : TstringList; begin Currentlist := TStringlist.Create; DDSList := TStringlist.Create; CopyList := TStringlist.Create; CurrentList.LoadFromFile(TMPPath + 'CurrentDivFiles.txt'); // 3049 Zeilen ex. G:\Files\dds\....Dateiname DDSList.LoadFromFile(TMPPath + 'DDSList.txt'); // 3293 Zeilen ex. icon_crops_diversity_2_dark_0.dds for i := 0 to CurrentList.Count -1 do begin STR := CurrentList.Strings[I]; for II := 0 to DDSList.count -1 do begin if AnsiPos(STR,DDSList.Strings[II]) = 0 then CopyList.add(DDSList.Strings[II]); end; end; CopyList.SavetoFile(TMPPath + 'CopyList.txt'); end; Kann mir jemand auf die Sprünge helfen? creehawk |
AW: Stringlisten vergleichen
Ich hätte das vielleicht anders umgesetzt.
Nimm die Funktion IndexOf, dann siehst du, ob der String schon in der Liste drin ist. |
AW: Stringlisten vergleichen
Und wo werden die StringListen wieder freigegeben?
|
AW: Stringlisten vergleichen
IndexOf ......
Wie macht man das richtig?:oops: Freigegeben? Wenn ich die beiden - Current und DDS - VOR dem speichern der CopyList freigebe (Free) ändert das nicht am OutofMemory.... creehawk Ausserdem : die beiden Dateien sind zusammen 400 KB groß.... OutOfMemory? |
AW: Stringlisten vergleichen
Ich habe jetzt mal anstell des schreibens in die CopyList das ausgeben lassen in ein Memofeld auf der Form.
Das läuft und läuft - ein Eintrag nach dem anderen... Eigentlich sollte doch die Zeile AnsiPos nur dann in die Memo/Stringlist schreiben wenn er den Eintrag nicht findet. Irgendwas ist im Konstrukt faul. Aber was zum Teufel? creehawk |
AW: Stringlisten vergleichen
Du lädst einfach die Liste und prüfst, ob ein String dort schon enthalten ist oder nicht.
Delphi-Quellcode:
SL.Loadfromfile('deineliste.txt');
If SL.IndexOf('deineSuche') = -1 then begin //dann mache was mit 'deineSuche' end; |
AW: Stringlisten vergleichen
Verstehe ich das richtig: Du willst die Zeilen der einen Datei ermitteln, die in der anderen nicht vorkommen?
[edit] @zeras: IndexOf gibt einen Integer zurück, keinen Boolean ;-) [/edit] [edit2] Falls ich das richtig verstanden habe, könnte man das ja auch ohne 3. Liste umsetzen (ungetestet):
Delphi-Quellcode:
[/edit2]
var
Gross: TStringList; Klein: TStringList; i: integer; begin Klein := nil; Gross := TStringList.Create; try Klein := TStringList.Create; Klein.LoadFromFile(...); Gross.LoadFromFile(...); for i := Gross.Count - 1 downto 0 do if Klein.IndexOf(Gross[i]) >= 0 then Gross.Delete(i); Gross.SaveToFile(...); finally Klein.Free; Gross.Free; end; end; |
AW: Stringlisten vergleichen
Tja, jetzt ist die CopaList so gross wie die Currentlist....
Hatte ich nicht irgendwo gelesen das IndexOf nur ein ganzen Stringvergleich macht? In der Currentlist stehen aber nur die Dateinamen, in der DDSList die Dateinamen MIT den Pfaden.... creehawk |
AW: Stringlisten vergleichen
Zitat:
|
AW: Stringlisten vergleichen
Okay, tut mir leid, war vielleicht nicht deutlich genug, aber in der ersten Post stehten zwei Beispiele drin im Delhi Code.
Es sollte aber funktionieren wenn ich die Listen angleiche. Das mache ich mal. Trotzdem: Warum OutOfMemory? creehawk |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:45 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