Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Unbekannter Teilstring in mehrern Strings (https://www.delphipraxis.net/150971-unbekannter-teilstring-mehrern-strings.html)

NickelM 1. Mai 2010 22:11


Unbekannter Teilstring in mehrern Strings
 
Hallo zusammen,

Ich hab mal ne ganz dumme Frage. Es geht um folgendes:

Ich will in mehren Pfadstrings wie :

Code:
C:\Eigene Dateien\test.mp3
C:\Eigene Dateien\test2.mp3
C:\Eigene Dateien\meine musik\test.mp3
Den gemeinsamen Pfad String herausfinden. In dem Beispiel wäre es C:\Eigene Dateien\

Ich wollte jetzt mal fragen gibt es eine fertige Funktion dafür oder muss ich die mri selbstbauen.
Da ich jetzt nicht vermute das es die gibt, wie wäre da die eleganteste Lösung.
Mir würde einfallen mit einer for- Schleife jeden Char und jeden String druchzugehen (Strings sind in einer TStrinList)
und jeden Buchstaben druchzugehen und zu vergleichen. Da es aber schon knapp 200 Einträge sind würde das denk ich mir ziemlich lange dauern.

Gibst da nicht eine bessere Lösung?

daywalker9 1. Mai 2010 22:15

Re: Unbekannter Teilstring in mehrern Strings
 
Nimm dir den kürzesten String und Geh von Backslash zu Backslash und guck ob der Teilstring vom Start bis zum aktuellen Backslash in den anderen Strings enthalten ist

NickelM 1. Mai 2010 22:20

Re: Unbekannter Teilstring in mehrern Strings
 
Okay danke hört sich schonmal gut an..werde ich mal ausprobieren danke.
Melde mich ob es geklappt hat und schnell geht.

himitsu 1. Mai 2010 23:02

Re: Unbekannter Teilstring in mehrern Strings
 
Nicht unbedingt das Schellste, aber es läuft zuverlässig:
Delphi-Quellcode:
var
  SL: TStringList;
  S, S2: String;
  B: Boolean;
  i: Integer;
begin
  // input: SL
  // output: S
  S := SL[0] + '\';
  repeat
    S2 := S;
    S := ExtractFilePath(ExtractFileDir(S));
    if S = S2 then
    begin
      S := '';
      Break;
    end;
    B := True;
    for i := 1 to SL.Count - 1 do
    begin
      if Pos(S, SL[i]) = 0 then
      begin
        B := False;
        Break;
      end;
    end;
  until B;
  ShowMessage(S);

DeddyH 2. Mai 2010 08:26

Re: Unbekannter Teilstring in mehrern Strings
 
Zitat:

Zitat von himitsu
Nicht unbedingt das Schellste, aber es läuft zuverlässig:

Solange SL nicht leer ist ;)

himitsu 2. Mai 2010 08:49

Re: Unbekannter Teilstring in mehrern Strings
 
Zitat:

Zitat von DeddyH
Zitat:

Zitat von himitsu
Nicht unbedingt das Schellste, aber es läuft zuverlässig:

Solange SL nicht leer ist ;)

Zuverlässig im Sinne von das Ergebnis liefert den richtigen Pfad ...
von vorhandener Fehlerprüfung/-behandlung hab ich nichts gesagt. :stupid:


Aber wenn es sein muß,dann entweder diese Zeile
Delphi-Quellcode:
S := SL[0] + '\';
hierdurch ersetzen
Delphi-Quellcode:
if SL.Count = 0 then S := ''
else S := SL[0] + '\';
oder alles überspringen
Delphi-Quellcode:
if SL.Count > 0 then
begin
  S := SL[0] + '\';
  repeat
    ...
  until B;
end
else
  S := '';
ShowMessage(S);
Erst den kürzesten Pfad suchen hab ich absichtlich weggelassen,
denn entweder ist der erste Pfad schon der Kürzeste oder er wird solange gekürzt, bis es paßt.

NickelM 3. Mai 2010 03:53

Re: Unbekannter Teilstring in mehrern Strings
 
So ich habe eine Lösung gefunden. Danke trotzdem für den Code. Man weis ja nicht wann man ihn mal braucht :zwinker:
Da das kleine Porgramm nur für mich ist, hab ich mir anders geholfen. Einen klick mehr zumachen ist ja net so umständlich :mrgreen:

Die Einträge sind in einer ListBox. Ich hab das jetzt so gemacht, das ich die Zeile makiere, die ich haben will (also dan Pfad)
er liest mir dan aus der Zeile den Pfad raus und wenn ich einen "Unterordner" haben will kann ich mit einem Button den PFad um eine Ornder zurück machen.
Das ändern läuft dann so ab, dass er in der ListBox alle Einträge durchsucht und dann ob der String vom Anfang bis zu der Größe des zuveränderten übereinstimmt.
Dies mach ich mit Copy.

Hoffe ist verständlich im groben.

Wenn wer sowas braucht kann mich ja pmen :coder:

Danke trotzdem nochmal an alle, für die Hilfe.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:12 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz