AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Letztes Verzeichnis im String ermitteln

Ein Thema von DieDolly · begonnen am 26. Jan 2024 · letzter Beitrag vom 27. Jan 2024
Antwort Antwort
Delphi.Narium

Registriert seit: 27. Nov 2017
2.552 Beiträge
 
Delphi 7 Professional
 
#1

AW: Letztes Verzeichnis im String ermitteln

  Alt 26. Jan 2024, 20:32
Bestimmt nicht die beste Lösung, aber scheint zu funktionieren:
Delphi-Quellcode:
function GetLetztesVerzeichnis(s : String) : String;
begin
  s := ExcludeTrailingPathDelimiter(ExtractFilePath(s));
  s := ReverseString(s);
  s := Copy(s,1,Pos('\',s) - 1);
  Result := ReverseString(s);
end;
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.316 Beiträge
 
Delphi 12 Athens
 
#2

AW: Letztes Verzeichnis im String ermitteln

  Alt 26. Jan 2024, 22:04
Es gibt z.B. Probleme mit relativen Pfaden, bei solchem Vorgehen.

Hatte ich auch schonmal so gemacht, aber im Grunde ist es nur eine Krücke, um mit POS, einer Funktion, welche das Erste sucht, das Letzte zu suchen, anstatt etwas zu verwenden, was das Letzte sucht.
Pos/PosEx in einer Schleife (immer noch schneller, als ein/zwei mal ReverseString)

Wobei das zweite ReverseString garnicht nötig ist, wenn man die gefundene Position mit Length verrechnet, um direkt aus dem originalen String zu kopieren,

aber
Delphi-Referenz durchsuchenstring.LastIndexOf
Delphi-Referenz durchsuchenstring.LastDelimiter


oder, wie es Uwe bereits zeigte, also Pfadnamenfunktionen, zum Extrahieren des letzten Namen.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (26. Jan 2024 um 22:13 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.602 Beiträge
 
Delphi 12 Athens
 
#3

AW: Letztes Verzeichnis im String ermitteln

  Alt 26. Jan 2024, 22:20
Auch eine Alternative:
Delphi-Quellcode:
  var arr := tmpSrcPath.Split(['\', ':']); // oder auch SplitString
  Result := arr[High(arr)];
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.120 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Letztes Verzeichnis im String ermitteln

  Alt 27. Jan 2024, 13:02
Da unter Windows als Pfadtrenner Slash (/) und Backslash (\) zulässig sind
und das auch in beliebiger Anzahl hintereinander habe ich mir sowas erstellt:

Delphi-Quellcode:
function csExcludeTrailingPathDelimiterWin(const AsInput : string) : string;

var
  i : integer;

begin
  Result := AsInput;
  i := length(AsInput);
  if i = 0 then exit;
  while CharInSet(AsInput[i],['\','/']) do dec(i);
  Result := Copy(AsInput,1,I);
end;
Im Explorer funktioniert das mit den gemischten und mehreren Pfadtrennern
zwar nicht, aber in der Console.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#5

AW: Letztes Verzeichnis im String ermitteln

  Alt 27. Jan 2024, 13:28
Da meine Pfdade intern alle mit UNC-Prefixen versehen sind, habe ich mir daraus sowas gemacht
Delphi-Quellcode:
function GetLastDirectory(Directory: string): string;
var
 arr: TArray<string>;
begin
 // Directory := ... UNC-Prefix entfernen ...
 arr := (ExcludeTrailingBackslash(Directory)).Split(['\', ':']);

 if (arr[High(arr)] <> '') then
  Result := arr[High(arr)]
 else
  Result := ExtractFileDrive(Directory).Replace(':', ''); // Das hier trifft zu, wenn "Directory" beispielsweise "F:\" ist. Resultat ist dann "F"
end;

// Ob "F" dann richtig ist oder nicht, darüber kann man sich streiten denke ich.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:43 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