Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Einige nützliche Dateifunktionen (https://www.delphipraxis.net/12333-einige-nuetzliche-dateifunktionen.html)

Mattin 25. Nov 2003 14:28


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:
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;
Das wars auch schon... :hi:

Smokey 25. Nov 2003 14:32

Re: Einige nützliche Dateifunktionen
 
find ich klasse, nur was spricht dagegen, die bereits von Delphi mitgelieferten Funktionen zu benutzen ?

Thunderchild 25. Nov 2003 14:35

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.

Mattin 25. Nov 2003 14:37

Re: Einige nützliche Dateifunktionen
 
Zitat:

Zitat von Smokey
find ich klasse, nur was spricht dagegen, die bereits von Delphi mitgelieferten Funktionen zu benutzen ?

Nix :)

Bloss langweilig wenns sowas schon gibt :-D

himitsu 25. Nov 2003 15:19

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:
Function UeberpruefeSlash(Const Pfad: String): String;
  Begin
    If (Length(Pfad) > 0) AND (Pfad[Length(Pfad)] <> '\') Then
      Result := Pfad + '\'
    Else
      Result := Pfad;
  End;
sonst aber nicht schlecht.


Nehmen wir uns aber mal GetFileName vor:
Delphi-Quellcode:
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;
Bei FileName = "C:\Test\Dat.ei" kommt dann sowas raus:
(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' *)
  • Result wird ständing neu gesetzt.
  • selbst wenn das Ergebnis gefunden wurde, wird die Schleife noch bis zum Ende ausgeführt
    (bei langen Verzeichnissen, ist das schon ein ganzes Stückchen)
  • ...

http://www.delphipraxis.net/images/common/divider.jpg
http://www.FrankNStein.de/Smiley-Kuss.gif * * http://www.FrankNStein.de/Smiley-Spinne.gif * * * http://www.FrankNStein.de/Smiley-Winken.gif

Luckie 25. Nov 2003 15:46

Re: Einige nützliche Dateifunktionen
 
Delphi-Quellcode:
function UeberpruefeSlash(const Pfad : String): String;
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.

Ich habe mir mal in einem nonVCL Programm sowas dafür gemacht:
Delphi-Quellcode:
function HasBackslash(Dir: String): Boolean;
begin
  result := Dir[length(Dir)] = '\';
end;
Und zum entfernen:
Delphi-Quellcode:
function DelBackSlash(Dir: String): String;
begin
  if length(dir) > 0 then
    SetLength(Result, Length(Result)-1);
end;

himitsu 25. Nov 2003 15:58

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
http://www.FrankNStein.de/Smiley-Kuss.gif * * http://www.FrankNStein.de/Smiley-Spinne.gif * * * http://www.FrankNStein.de/Smiley-Winken.gif

sakura 25. Nov 2003 16:05

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:...

Mattin 25. Nov 2003 16:06

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 ?

sakura 25. Nov 2003 16:08

Re: Einige nützliche Dateifunktionen
 
Zitat:

Zitat von Mattin
Ich muss dazu sagen, die Funktionen sind Uralt. Ich habe diese unter Delphi 1
damals geschrieben. War glaub ich 1992/3 oder so.

:mrgreen: Delphi 1 kam Ende Sommer 1995 auf den Markt ;-)

Zitat:

Zitat von Mattin
Aber verschiedene Lösungsvorlschläge sind ja mal auch nicht schlecht. Oder ?

Nein, nie. Das ist auch wünschenswert ;-) Deswegen würde ich mich auch freuen, wenn Du am Ende alle Prozeduren nach Beheben der Mängel noch einmal vorstellst :-)

...:cat:...


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:34 Uhr.
Seite 1 von 2  1 2      

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