![]() |
Einige nützliche Dateifunktionen
Hallo Zusammen,
hier ein paar nützliche Funktionen zu Dateien und Pfade von mir. ************************************************** ****************************** * Überprüft ob ein "\" am Ende des Pfades ist. * function UeberpruefeSlash(const Pfad : String): String; * Wenn nicht wird "\" darangehängt. ************************************************** ****************************** * Liefert den Filenamen aus einen einen String zurueck * function GetFileName(const FileName :String):String; * Bsp : GetFileName('C:\WINDOWS\SYSTEM\README.TXT') --> 'README.TXT' ************************************************** ***************************** * Liefert den Pfad einer Datei zurueck * function GetDirName(const FileName: String):String; * Bsp : GetDirName('C:\WINDOWS\SYSTEM\README.TXT') --> 'C:\WINDOWS\SYSTEM\' ************************************************** ***************************** * Liefert den Extender eines Dateinamens in Kleinbuchstaben zurück * function GetExtender(const FileName: String) :String; * Bsp_: GetExtender('Readme.TxT') --> 'txt' ************************************************** ***************************** * Holt den Dateinamen ohne Extender * function GetName(const FileName: String) :String; * Bsp.: GetName(Notepad.Exe) --> 'Notepad' ************************************************** ****************************** * Liefert den letzten Ordner aus einem Pfad zurück * function GetLastDirName(const FileName: String):String; * Bsp : GetLastDirName('C:\Programme\MeinProgramm') --> 'MeinProgramm' ************************************************** *****************************
Delphi-Quellcode:
Das wars auch schon... :hi:
function UeberpruefeSlash(const Pfad : String): String;
begin Result := Pfad; if (Length(Pfad) > 0) AND (Pfad[Length(Pfad)] <> '\') then Result := Result + '\'; end; function GetFileName(const FileName: String):String; var i: Integer; //Zaehlvariable S: Integer; //Slashposition im Filename Begin S := 0; For i:= Length(FileName) downto 0 do Begin IF S = 0 then Begin If FileName[I] = '\' then S := I; result := copy(FileName, S+1, Length(Filename)-S+1); End; End; End; function GetDirName(const FileName: String):String; var i: Integer; //Zaehlvariable S: Integer; //Slashposition im Filename Begin S := 0; For i:= Length(FileName) downto 0 do Begin IF S = 0 then Begin If FileName[I] = '\' then S := I; result := copy(FileName, 1, S ); End; End; End; function GetExtender(const FileName: String) :String; var i: Integer; s: Integer; Begin s := 0; For i := Length(FileName) downto 0 do Begin IF S = 0 then Begin If FileName[I] = '.' then S := I; result := copy(FileName, S+1, Length(Filename)-S+1); result := Lowercase(result); End; End; End; function GetName(const FileName: String) :String; var i: Integer; y,s: Integer; Ext: String; Begin s := 0; For i := Length(FileName) downto 0 do Begin IF S = 0 then Begin If FileName[I] = '\' then S := I; Ext := copy(FileName, S+1, Length(Filename)-S+1); y := Pos('.',Ext); result := Copy(Ext,0, y -1); result := Lowercase(result); End; End; End; function GetLastDirName(const FileName: String):String; var i: Integer; //Zaehlvariable S: Integer; //Slashposition im Filename Begin S := 0; For i:= Length(FileName) downto 0 do Begin IF S = 0 then Begin If FileName[I] = '\' then S := I; result := copy(FileName, S+1, Length(Filename)-S+1); End; End; End; |
Re: Einige nützliche Dateifunktionen
find ich klasse, nur was spricht dagegen, die bereits von Delphi mitgelieferten Funktionen zu benutzen ?
|
Re: Einige nützliche Dateifunktionen
Wenn Du auf die Indizes eines Strings zugreifst, solltest Du aber nur bis 1 runter zählen. Im Index 0 steht bei Strings der oben verwendeten Sorte die Länge, da ist kein Nutz-Zeichen drin.
|
Re: Einige nützliche Dateifunktionen
Zitat:
Bloss langweilig wenns sowas schon gibt :-D |
Re: Einige nützliche Dateifunktionen
Es tut mir leid, aber ich falle auch mal über diese Codes her.
Mal abgesehn davon, das es schon fertige Funktionen in Delphi gibt, sind diese Codes auch noch extrem ineffizient. Oder ist noch keinem aufgefallen, das verschiedene Befehle sinnloserweise abgearbeitet werden? Gegen UeberpruefeSlash kann mal nicht sagen, das ist schon nicht schlecht gemacht. Wobei das so schon etwas besser währe:
Delphi-Quellcode:
sonst aber nicht schlecht.
Function UeberpruefeSlash(Const Pfad: String): String;
Begin If (Length(Pfad) > 0) AND (Pfad[Length(Pfad)] <> '\') Then Result := Pfad + '\' Else Result := Pfad; End; Nehmen wir uns aber mal GetFileName vor:
Delphi-Quellcode:
Bei FileName = "C:\Test\Dat.ei" kommt dann sowas raus:
Function GetFileName(Const FileName: String): String;
Var I, S: Integer; Begin S := 0; For I := Length(FileName) downto 1 do IF S = 0 Then Begin If FileName[I] = '\' Then S := I; Result := Copy(FileName, S + 1, Length(FileName) - S + 1); End; End; (hab mal versucht die Zeilen in ihrer Abarbeitungsreihenfolge aufzuschreiben)
Delphi-Quellcode:
For I := ... (* I = 14 *)
IF 0{S} = 0 Then Begin If 'i'{FileName[I]} = '\' Then ... Result := 'C:\Test\Dat.ei'{Copy(FileName, 0 + 1, 14 - 0 + 1)}; End; For I := ... (* I = 13 *) IF 0{S} = 0 Then Begin If 'e'{FileName[I]} = '\' Then ... Result := 'C:\Test\Dat.ei'{Copy(FileName, 0 + 1, 14 - 0 + 1)}; End; For I := ... (* I = 12 *) IF 0{S} = 0 Then Begin If '.'{FileName[I]} = '\' Then ... Result := 'C:\Test\Dat.ei'{Copy(FileName, 0 + 1, 14 - 0 + 1)}; End; For I := ... (* I = 11 *) IF 0{S} = 0 Then Begin If 't'{FileName[I]} = '\' Then ... Result := 'C:\Test\Dat.ei'{Copy(FileName, 0 + 1, 14 - 0 + 1)}; End; For I := ... (* I = 10 *) IF 0{S} = 0 Then Begin If 'a'{FileName[I]} = '\' Then ... Result := 'C:\Test\Dat.ei'{Copy(FileName, 0 + 1, 14 - 0 + 1)}; End; For I := ... (* I = 9 *) IF 0{S} = 0 Then Begin If 'D'{FileName[I]} = '\' Then ... Result := 'C:\Test\Dat.ei'{Copy(FileName, 0 + 1, 14 - 0 + 1)}; End; For I := ... (* I = 8 *) IF 0{S} = 0 Then Begin If '\'{FileName[I]} = '\' Then S := 8{I}; Result := 'Dat.ei'{Copy(FileName, 8 + 1, 14 - 8 + 1)}; End; For I := ... (* I = 7 *) IF 0{S} = 8 Then ... (* FileName[7] = 't' *) For I := ... (* I = 6 *) IF 0{S} = 8 Then ... (* FileName[6] = 's' *) For I := ... (* I = 5 *) IF 0{S} = 8 Then ... (* FileName[5] = 'e' *) For I := ... (* I = 4 *) IF 0{S} = 8 Then ... (* FileName[4] = 'T' *) For I := ... (* I = 3 *) IF 0{S} = 8 Then ... (* FileName[3] = '\' *) For I := ... (* I = 2 *) IF 0{S} = 8 Then ... (* FileName[2] = ':' *) For I := ... (* I = 1 *) IF 0{S} = 8 Then ... (* FileName[1] = 'C' *)
http://www.delphipraxis.net/images/common/divider.jpg ![]() ![]() ![]() |
Re: Einige nützliche Dateifunktionen
Delphi-Quellcode:
Ganz schlecht. deutsch-englischer Mischmasch im Funktionsnamen. Das ist das erste was mich stört. Dann impliziert der Funktionsname, dass True oder False zurückgeliefert wird. Stattdessen stellt das Ding was mit meinem Pfad an. Was wenn ich wirklich nur wissen will ob jetzt ein BackSlash am Ende steht oder nicht? Dann muss ich noch mal extra überprüfen, ob deine Funktion einen Backslash angehangen hat oder nicht und ihn gegebenenfalls wieder entfernen.
function UeberpruefeSlash(const Pfad : String): String;
Ich habe mir mal in einem nonVCL Programm sowas dafür gemacht:
Delphi-Quellcode:
Und zum entfernen:
function HasBackslash(Dir: String): Boolean;
begin result := Dir[length(Dir)] = '\'; end;
Delphi-Quellcode:
function DelBackSlash(Dir: String): String;
begin if length(dir) > 0 then SetLength(Result, Length(Result)-1); end; |
Re: Einige nützliche Dateifunktionen
Na gut Luckie,
Wenn er das Ding z.B. ExtendetBackSlash oder so nennt, stört dich dann wohl nicht mehr all zu viel da dran. :mrgreen: Aber im Verhältnis zu den anderen Codes ist es doch ganz gut gelungen. :wink: http://www.delphipraxis.net/images/common/divider.jpg ![]() ![]() ![]() |
Re: Einige nützliche Dateifunktionen
Ich habe das mal verschoben, da die Codes wohl noch etwas Arbeit benötigen, um hilfreich zu sein. Zumal es für die meisten bereits elegantere Lösungen durch Delphi gibt ;-)
...:cat:... |
Re: Einige nützliche Dateifunktionen
[quote="himitsu"]Na gut Luckie,
Wenn er das Ding z.B. ExtendetBackSlash oder so nennt, stört dich dann wohl nicht mehr all zu viel da dran. :mrgreen: Aber im Verhältnis zu den anderen Codes ist es doch ganz gut gelungen. :wink: Ich muss dazu sagen, die Funktionen sind Uralt. Ich habe diese unter Delphi 1 damals geschrieben. War glaub ich 1992/3 oder so. Sicherlich führen viele Wege nach Rom um auf das gleiche Ergebnis zu kommen. :) Aber verschiedene Lösungsvorlschläge sind ja mal auch nicht schlecht. Oder ? |
Re: Einige nützliche Dateifunktionen
Zitat:
Zitat:
...:cat:... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:34 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