Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Stringroutine gesucht (https://www.delphipraxis.net/65534-stringroutine-gesucht.html)

RolfPolf 17. Mär 2006 17:04


Stringroutine gesucht
 
Hallo Ihr,

Anfängerfrage:
Gibts in Delphi keine Routine, die mir das letzte Vorkommen eines gesuchten Zeichens in einem String ermittelt und mir den Reststring oder die Position zurückliefert? Also sowas wie die Funktion strrchr in PHP . Wenn ich beispielsweise nen String "C:\xxx\yyy\zzz\datei.txt" habe und möchte gerne den Ordner rausbekommen (also "C:\xxx\yyy\zzz") ist das sonst relativ aufwändig...
Wäre toll wenn jemand mir da weiterhelfen könnte!
Viele Grüße,
RolfPolf

Dust Signs 17. Mär 2006 17:06

Re: Stringroutine gesucht
 
Pos?

Dust Signs

RolfPolf 17. Mär 2006 17:08

Re: Stringroutine gesucht
 
Zitat:

Zitat von Dust Signs
Pos?

Dust Signs

??? Pos liefert mir das ERSTE Vorkommen im String, ich brauche das LETZTE vorkommen. Habe nix gefunden wie ich Pos parametrisieren kann um das umzustellen.

mkinzler 17. Mär 2006 17:08

Re: Stringroutine gesucht
 
StrScan()+1 liefert dir den Reststring bezüglich des ersten Vorkommens.
Aber den Ordener kannst du mit ExtractFilePath aus einem Dateinamen extrahieren.

marabu 17. Mär 2006 17:10

Re: Stringroutine gesucht
 
ExtractFileDir() liefert übrigens den Ordner - ohne terminierenden Backslash.

Grüße vom marabu

Corpsman 17. Mär 2006 17:39

Re: Stringroutine gesucht
 
Wobei du dir sowas auch sehr einfach selbst bauen kannst.

in speziel deinem Fall macht es keinen sinn da du ja echt nur Extractfilepath brauchst.

Generell ist ein Pos aber nicht schwer zu implementieren.

Versuche das hier grad mal.

Delphi-Quellcode:

Function PosRueckwaerts(Const Substring, s: String): integer;
Var
  x, y: Integer;
  b: boolean;
Begin
  result := 0; // Falls wir den Substring gar nicht finden
  If Length(s) <> 0 Then // Standart Fehler Abfangen
    If Length(Substring) <> 0 Then // Standart Fehler Abfangen
      If Length(s) >= length(substring) Then Begin // Standart Fehler Abfangen
        x := length(s) - Length(substring) + 1; // Die MAximal hinterste Position in s berechnen
        While x > 0 Do Begin // Wir suchen erst mal nur nach den 1. Zeichen ob die stimmen
          If s[x] = Substring[1] Then Begin // Wenn die Stimmen dann schauen wir nach ob der Rest stimmt
            b := true; // initialisieren
            y := 2; // Wir haben das 1. Zeichen schon verglichen, deswegen braucehn wir erst mit 2 beginnen
            While (y <= Length(Substring)) And (b) Do Begin // Wenn wir wissen das es nicht mehr passt können wir abbrechen
              If s[x + y - 1] <> Substring[y] Then b := false;// Feststellen ob es passt
              inc(y);// Weiterzählen nicht vergessen
            End;
            If b Then Begin// Wenn wir die Position gefunden haben brechen wir alles ab.
              result := x;
              exit;
            End;
          End;
          dec(x);// Weiterzählen nicht vergessen.
        End;
      End;
End;

Procedure TForm1.Button1Click(Sender: TObject);
Begin
  showmessage(inttostr(PosRueckwaerts('l', 'Hallo Welt')));
End;

RolfPolf 17. Mär 2006 19:30

Re: Stringroutine gesucht
 
Vielen Dank an alle,
habt mir sehr weitergeholfen!

Grüße,
RolfPolf

thkerkmann 17. Mär 2006 20:15

Re: Stringroutine gesucht
 
Hi,

und wenn es sich um ein einzelnes Zeichen handelt gibt es noch

Delphi-Quellcode:
   i := LastDelimiter('\', filename);
so macht es ExtractFilePath übrigens auch.. steht in Sysutils.

Gruss

Thomas


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:43 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