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
Seite 1 von 2  1 2      
DieDolly

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

Letztes Verzeichnis im String ermitteln

  Alt 26. Jan 2024, 18:29
Dieser Code hier ist vermutlich schon seit 10 Jahren in meiner pas-Datei und wurde seitdem auch nicht verändert.
Ich würde euch gerne fragen, ob dieses Vorhaben besser umsetzbar ist.

Bitte nicht hauen, der Code ist uralt und echt nicht gut.

Delphi-Quellcode:
function GetLastDirectory(Directory: string): string;
var
 tmpSrcPath: string;
begin
 Directory := Trim(Directory);

 if Directory = 'then
  Exit;

 tmpSrcPath := Directory;

 if EndsStr('\', tmpSrcPath) then
  tmpSrcPath := Copy(tmpSrcPath, 1, Length(tmpSrcPath) - 1);

 if Pos(':', tmpSrcPath) > 0 then
  tmpSrcPath := StringReplace(tmpSrcPath, ':', '', [rfReplaceAll]);

 if Trim(tmpSrcPath) <> 'then
  Result := Copy(tmpSrcPath, LastDelimiter('\', tmpSrcPath) + 1, Length(tmpSrcPath))
 else
  Result := '';
end;
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Letztes Verzeichnis im String ermitteln

  Alt 26. Jan 2024, 18:51
Würde ich heute so schreiben:
Delphi-Quellcode:
  
uses
  System.SysUtils, System.IOUtils;

...
 
function GetLastDirectory(const Directory: string): string;
begin
  Result := TPath.GetFileName(ExcludeTrailingPathDelimiter(Directory))
end;
Müsste man vielleicht noch mit den realen Randbedingungen testen (z.B. Pfade mit Punkten, nur Laufwerk usw.)
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Letztes Verzeichnis im String ermitteln

  Alt 26. Jan 2024, 19:24
TPath.GetFullPath
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
DieDolly

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

AW: Letztes Verzeichnis im String ermitteln

  Alt 26. Jan 2024, 19:44
https://learn.microsoft.com/de-de/do...h?view=net-8.0

Was hat GetFullPath damit zu tun, wenn man das letzte Verzeichnis ermitteln möchte?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Letztes Verzeichnis im String ermitteln

  Alt 26. Jan 2024, 20:04
Müsste man vielleicht noch mit den realen Randbedingungen testen (z.B. Pfade mit Punkten, nur Laufwerk usw.)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
DieDolly

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

AW: Letztes Verzeichnis im String ermitteln

  Alt 26. Jan 2024, 20:09
Ich weiß nicht warum, aber deine Antworten werfen immer mehr Fragen auf als dass sie helfen. Irgendwo natürlich schön, weil man ja auch nachdenken soll.
Das ist natürlich in einem Forum hilfreich (zu einem gewissen Maße).

Ich verstehe aber nicht, was TPath.GetFullPath mit irgendwelchen Tests zu tun haben soll. Oder soll es nicht?
Wenn ich das testen möchte, schreibe ich einfach TestFunktionXYZ('F:\') usw.

Geändert von DieDolly (26. Jan 2024 um 20:12 Uhr)
  Mit Zitat antworten Zitat
Delphi.Narium

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

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.063 Beiträge
 
Delphi 12 Athens
 
#8

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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

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.453 Beiträge
 
Delphi 12 Athens
 
#9

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.116 Beiträge
 
Delphi 11 Alexandria
 
#10

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
Antwort Antwort
Seite 1 von 2  1 2      


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 10:36 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