Einzelnen Beitrag anzeigen

choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#17

Re: Einige nützliche Dateifunktionen

  Alt 26. Nov 2003, 18:48
Zitat von Luckie:
Zitat von choose:
Mal davon ab, dass der Funktionsname HasBackslash ebenfalls nicht sprechend ist (schließlich könnte er irgendeinen Backslash erkennen)
Zitat:
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?
Dieser String "c:\foo\bar\foobar" enthält drei Backslashes, ich erwarte, dass der Rückgabewert einer Funktion HasBackslash den Wert True enthält.
Zitat von Luckie:
Hm, das könnte in der Tat ein Problem sein. Aber die modifizierte Fassung hab eich nich nicht benutzt.
funktioniert sie nun, oder nicht?

Zitat von Luckie:
[...]und was ist HasTrailingBackSlash? Eine Funktion? Nicht sehr gut, die wird ja jedes mal auf gerufen, so lange die Schleife läuft.
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;
Genau genommen wird sie im Idealfall genau einmal aufgerufen und mach die selben Tests wie die direkte Implementierung (short-circuit). Der Aufruf der Funktion ist daher kaum "teurer", verdeutlicht hingegen aber die Intention, ohne dass die Statements verstanden werden müssen.
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:
  • Es wird nicht der Parameter verändert, wie der gekürzte Imparativ "Delete" suggeriert (siehe auch System.Delete)
  • Die Funktion betrachtete ausschließlich die Backslashes am Ende des Strings
  • Die Funktion gibt einen String zurück, der keinen der betrachteten Backslashes mehr enthält (also ist auch der Fall mit mehreren Backslashes geklärt)
[/edit]
gruß, choose
  Mit Zitat antworten Zitat