Delphi-PRAXiS
Seite 2 von 5     12 34     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Verzeichnisse in Listbox auflisten (https://www.delphipraxis.net/21696-verzeichnisse-listbox-auflisten.html)

s14 7. Mai 2004 07:55

Re: Verzeichnisse in Listbox auflisten
 
@SirThornberry
Mal nur so eine Idee, wie wär's damit :?:

Delphi-Quellcode:
Dest.Lines.Text := StringReplace(Source, Delimiter, #13#10, [rfReplaceAll, rfIgnoreCase]);
Gruß
s14

SirThornberry 7. Mai 2004 08:07

Re: Verzeichnisse in Listbox auflisten
 
@s14: Auf den ersten Blick ne supi variante ABER:
versuch mal
Delphi-Quellcode:
Stringliste.Add('abc'#13#10'def');
Ergebnis davon ist das es in einem Item ist:
Wenn du allerdings mit deinem Stringreplace arbeitest wird es in zwei items aufgeteilt.
Wenn du jetzt folgenden String hast
Code:
Item1
  Entry1
  Entry2
|
Item2
  Entry1
  Entry2
und "|" der Delimiter ist so wirst du bei deiner Stringreplacevariante & Items in der Stringliste vorfinden...
(korrigiert mich wenn ich nen denkfehler hab, aber eigentlich hab ich damals wegen genau diesem problem die funktion geschrieben)

s14 7. Mai 2004 08:20

Re: Verzeichnisse in Listbox auflisten
 
@SirThornberry: Da hast Du natürlich Recht, NUR :wink:
die Frage bezog sich doch auf das Trennen einer einzigen Zeile nach Leerzeichen, also ohne weitere Umbrüche.

Gruß
s14

s14 7. Mai 2004 08:25

Re: Verzeichnisse in Listbox auflisten
 
Also, ich habs jetzt doch mal probiert, funktioniert eigentlich 8)

Delphi-Quellcode:
procedure SplitStrToStringList(const source: String; const Delimiter: String; Dest: TStrings);
begin
  Dest.Text := StringReplace(Source, Delimiter, #13#10, [rfReplaceAll, rfIgnoreCase]);
end;
Aufruf dann beispielsweise zum testen mit:

Delphi-Quellcode:
procedure TForm1.Button24Click(Sender: TObject);
begin
  SplitStrToStringList('Zugriffsrechte 11 jaschu-mac4win homepages 4096 May 5 14:47 ', ' ', memo1.Lines);
end;

SirThornberry 7. Mai 2004 08:54

Re: Verzeichnisse in Listbox auflisten
 
@s14: hast recht, für die einzelne Zeile reicht nadürlich nen StringReplace...

DataCool 7. Mai 2004 10:24

Re: Verzeichnisse in Listbox auflisten
 
@SirThornberry:
Gut dann ist meine Function halt unperformat :sad: :oops:
Aber ich habe die vor 2/3 Jahren geschrieben und muss damit eigentlich immer nur Strings splitten, alle unter 1 MB :mrgreen:
Werde mir aber gleiche Deine Funktion mal näher betrachten.

GRuß Data

Lamy 7. Mai 2004 13:07

Re: Verzeichnisse in Listbox auflisten
 
Hi!

Danke für die vielen Antworten, aber irgendwie kapier ich hier gar nix mehr :gruebel:

Wie ist die Prozedur vopn SirThornberry einzubinden?
Was genau macht die mit

Dest.Clear;
count := 1;
LStartpos := 0;
LEndepos := 0;
LSourcelength := length(Source);

?


Danke schonmal!

SirThornberry 7. Mai 2004 13:33

Re: Verzeichnisse in Listbox auflisten
 
DataCool war so freundlich meine Funktion noch ein bischen zu verbessern - THANKS
Delphi-Quellcode:
procedure splitString(const Source: String; const Delimiter: String; var Dest: TStringlist);
var count: Integer;
      LStartpos, LEndepos, LSourcelength: Integer;
      LDelimiterLength : Integer;
begin
   Dest.Clear;
   count := 1;
   LStartpos := 0;
   LEndepos := 0;
   LSourcelength := length(Source);
   LDelimiterLength := Length(Delimiter);
   while count <= LSourcelength do begin
      if copy(Source, count, LDelimiterLength) = Delimiter then begin
         LEndepos := count;
         dest.Add(copy(Source, LStartpos + 1, LEndepos - LStartpos - 1));
         LStartpos := count + LDelimiterLength - 1;
         inc(count,LDelimiterLength);
      end
      else begin
         inc(count);
      end;
   end;
   if LEndePos <> Count - LDelimiterLength then
         dest.Add(copy(Source, LStartpos + 1, count - LStartpos - 1));
end;
@Lamy: eigentlich brauchst du die funktion nicht da dein Problem einzeilig ist und somit stringreplace die einfacherere alternative ist.
Zu deinen Fragen:
Delphi-Quellcode:
Dest.Clear; //leert die Ziel-Stringliste (dem user bissl arbeit abnehmen)
count := 1; //Count ist der Index wo wir uns gerade im String befinden
LStartpos := 0; //anfangs wird die startposition auf 0 gesetzt damit, irgendwo muss ja der string anfangen
LEndepos := 0; //Da wir noch nicht parsen muss die endeposition auch auf 0 - wird später hochgezählt
LSourcelength := length(Source); //wird für schleifenabbruch bedingung gebraucht. gibt an wie lang der string ist der zerteilt werden soll
Beispielaufruf:
Delphi-Quellcode:
var LListe: TStringlist;
begin
  LListe := TStringlist.create;
  splitString('Part1|Part2|Part3', '|'; LListe);
  //jetzt sollte in LListe der geteilte sting sein - also 3 Items
  [...] //dein source (also das auswerten der items)
  LListe.Free;
end;
[Edit]Fehler in Funktion beseitigt[/Edit]

Lamy 7. Mai 2004 13:53

Re: Verzeichnisse in Listbox auflisten
 
Danke, die Erklärung sagt mir so einiges :)


Aber:
Zitat:

Zitat von SirThornberry
@Lamy: eigentlich brauchst du die funktion nicht da dein Problem einzeilig ist und somit stringreplace die einfacherere alternative ist.

???


Ist das die Methode die S14 gepostet hat?
Die kapier ich auch nicht - da ist ja nicht nur "Zugriffsrechte 11 jaschu-mac4win homepages 4096 May 5 14:47" in der Stringliste sondern auch diese Daten aller anderen Dateien / Ordner die er vom ftp ausliest...

SirThornberry 7. Mai 2004 13:56

Re: Verzeichnisse in Listbox auflisten
 
genau, das ist die funktion die s14 gepostet hat. bei seiner variante musst du auch jede zeile nochmal in eine stringliste aufsplitten. Man könnte auch noch die unperfomantere Variante nehmen und sich jedes Element extra holen. Hab da glaube irgendwann mal ne funktion gepostet die "splitOutIndex" oder so hieß. Allerdings ist die funktion noch nicht geschwindigkeits optimiert...


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:21 Uhr.
Seite 2 von 5     12 34     Letzte »    

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-2025 by Thomas Breitkreuz