![]() |
Re: Einige nützliche Dateifunktionen
Luckie, deine beiden Routinen sind aber auch nicht das Gelbe vom Ei.
Delphi-Quellcode:
Dir = Leerstring -> Knatsch !!
function HasBackslash(Dir: String): Boolean;
begin result := Dir[length(Dir)] = '\'; end;
Delphi-Quellcode:
ok, kein Absturz, aber damit löscht du jedes Zeichen von hinten, nicht nur Slash'e
function DelBackSlash(Dir: String): String;
begin if length(dir) > 0 then SetLength(Result, Length(Result)-1); end; Roderich |
Re: Einige nützliche Dateifunktionen
[quote="sakura"]
Zitat:
:oops: Wusste nicht mehr genau wann Delphi raus kam.Schrieb ja schon vorsichtshalber oder so . Zitat:
Wenn ich Zeit dazu finde werde ich mir mal Prozeduren nochmal zu Brust nehmen. Kann aber ein weilchen Dauern. |
Re: Einige nützliche Dateifunktionen
Zitat:
Zitat:
Zitat:
So verbessert:
Delphi-Quellcode:
////////////////////////////////////////////////////////////////////////////////
// Procedure : HasBackslash // Comment : Checks whether path ends with a backslash or not function HasBackslash(Dir: String): Boolean; begin if length(Dir) > 0 then result := Dir[length(Dir)] = '\'; end; //////////////////////////////////////////////////////////////////////////////// // Procedure : DelBackSlash // Comment : Removes the last backslash of a path function DelBackSlash(Dir: String): String; begin if (length(dir) > 0) and (Dir[length(Dir)] = '\') then SetLength(Result, Length(Result)-1); end; |
Re: Einige nützliche Dateifunktionen
Zitat:
diese Funktion hast Du tatsächlich im Einsatz ("Ich habe mir mal in einem nonVCL Programm sowas dafür gemacht")?! Mal davon ab, dass der Funktionsname HasBackslash ebenfalls nicht sprechend ist (schließlich könnte er irgendeinen Backslash erkennen) und "Backslash" anders schreibt als in DelBackSlash, wo wird denn Result innerhalb von DelBackSlash gesetzt? Du prüfst einen Parameter und änderst daraufhin den Rückgabewert, der bisher nicht belegt worden ist, andernfalls wird der Rückgabewert nicht einmal angefasst... Vielleicht so?
Delphi-Quellcode:
Wenn der Ton etwas aggressiv klingen sollte, liegt das vielleicht daran, dass ich gerade auf der Arbeitsplatte wg einer defekten Kaffeekanne die Dispersionseigenschaften selbigen Inhalts beobachten könnte... ;)
function GetWithoutTrailingBackslash(const ADirectory: string): string;
begin Result:= ADirectory; while HasTrailingBackslash(Result) do SetLength(Result, Length(Result)-1); end; |
Re: Einige nützliche Dateifunktionen
[quote="choose"] Mal davon ab, dass der Funktionsname HasBackslash ebenfalls nicht sprechend ist (schließlich könnte er irgendeinen Backslash erkennen)´
[quote] Er sit aussagekräftig, da sich die Funktion in einer Include-Datei namens FileTools befindet. Um was soll es also anderes gehen, als um Pfade? Zitat:
Zitat:
Zitat:
Zitat:
Wenn dann so:
Delphi-Quellcode:
function DelBackSlash(Dir: String): String;
begin result := Dir; if (length(dir) > 0) and (Dir[length(Dir)] = '\') then SetLength(Result, Length(Result)-1); end; |
Re: Einige nützliche Dateifunktionen
Ich will auch mal, :mrgreen:, denn wenn ich irgendeinen Wert an "Result" übergebe, dann benutze ich auch "Result" zum Testen. Ansonsten könnte man auch die Variable im Funktionskopf bearbeiten und dann an das Funktionsergebnis weiterreichen. Geht hier aber nicht, weil es eine Konstante ist. Absichtlich! Dann kommt man nämlich gar nicht erst in Versuchung, den Wert direkt bearbeiten zu wollen.
Delphi-Quellcode:
function DelBackslash(const Dir: string): string;
begin Result := Dir; if(Result <> '') then while(Result[length(Result)] = '\') do SetLength(Result,length(Result)-1); end; |
Re: Einige nützliche Dateifunktionen
Zitat:
Zitat:
Zitat:
Zitat:
Eine Schleife habe ich nur für den unwahrschienlichen Fall, dass der Inhalb des Strings etwas in dieser Form ist "c:\foo\\". Unter diesen Umständen würde die Implementierung mit if trotzdem einen Backslash am Ende hinterlassen... [edit]zu den mitromanenvergleichbaren Bezeichnern: Auch hier wird durch DelBackslash nicht klar, welcher Backslash nun gelöscht wird, bzw. ob im Fall "c:\\" beide gelöscht werden, tatsächlich setzt sich der Bezeichner GetWithoutTrailingBackslash aus mehr Zeichen zusammen, enthält aber auch mehr information:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:07 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-2025 by Thomas Breitkreuz