AGB  ·  Datenschutz  ·  Impressum  







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

Einige nützliche Dateifunktionen

Ein Thema von Mattin · begonnen am 25. Nov 2003 · letzter Beitrag vom 26. Nov 2003
Antwort Antwort
Seite 1 von 2  1 2      
Mattin

Registriert seit: 4. Sep 2003
72 Beiträge
 
Delphi 7 Professional
 
#1

Einige nützliche Dateifunktionen

  Alt 25. Nov 2003, 14:28
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...
Mit freundlichen Grüßen
Mattin

http://www.martin-karwoth.de
  Mit Zitat antworten Zitat
Benutzerbild von Smokey
Smokey

Registriert seit: 10. Nov 2003
Ort: Puerto de la Cruz
158 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Einige nützliche Dateifunktionen

  Alt 25. Nov 2003, 14:32
find ich klasse, nur was spricht dagegen, die bereits von Delphi mitgelieferten Funktionen zu benutzen ?
Greif dir ein gutes Stück Fleisch auf deinem Weg nach draussen !!!
  Mit Zitat antworten Zitat
Benutzerbild von Thunderchild
Thunderchild

Registriert seit: 12. Nov 2003
Ort: Nohra
139 Beiträge
 
Delphi 7 Personal
 
#3

Re: Einige nützliche Dateifunktionen

  Alt 25. Nov 2003, 14:35
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.
Das letzte Schöne, das in C geschrieben wurde, war Schuberts 9. Sinfonie.
Meine Softwareseite (Link aktualisiert am 13.12.2006).
  Mit Zitat antworten Zitat
Mattin

Registriert seit: 4. Sep 2003
72 Beiträge
 
Delphi 7 Professional
 
#4

Re: Einige nützliche Dateifunktionen

  Alt 25. Nov 2003, 14:37
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
Mit freundlichen Grüßen
Mattin

http://www.martin-karwoth.de
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Einige nützliche Dateifunktionen

  Alt 25. Nov 2003, 15:19
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.FrankNStein.de/Smiley-Kuss.gif * * http://www.FrankNStein.de/Smiley-Spinne.gif * * * http://www.FrankNStein.de/Smiley-Winken.gif
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Einige nützliche Dateifunktionen

  Alt 25. Nov 2003, 15:46
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;
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Einige nützliche Dateifunktionen

  Alt 25. Nov 2003, 15:58
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.

Aber im Verhältnis zu den anderen Codes ist es doch ganz gut gelungen.


http://www.FrankNStein.de/Smiley-Kuss.gif * * http://www.FrankNStein.de/Smiley-Spinne.gif * * * http://www.FrankNStein.de/Smiley-Winken.gif
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Einige nützliche Dateifunktionen

  Alt 25. Nov 2003, 16:05
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

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Mattin

Registriert seit: 4. Sep 2003
72 Beiträge
 
Delphi 7 Professional
 
#9

Re: Einige nützliche Dateifunktionen

  Alt 25. Nov 2003, 16:06
[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.

Aber im Verhältnis zu den anderen Codes ist es doch ganz gut gelungen.


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 ?
Mit freundlichen Grüßen
Mattin

http://www.martin-karwoth.de
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Einige nützliche Dateifunktionen

  Alt 25. Nov 2003, 16:08
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.
Delphi 1 kam Ende Sommer 1995 auf den Markt

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

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  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 18:33 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