Sehr schöne Funktion, mleyen, vielen Dank dafür!
Bevor ich deinen Code gesehen habe, hab' ich mich selbst an die Arbeit gemacht und deine Funktion erweitert. Dabei wird berücksichtigt, dass der Anwender die Sonderzeichenumwandlung nach seinen Wünschen selbst in einem Editfeld eingeben können soll, wodurch die Anzahl der Sonderzeichen-Umwandlungen zur Design-Zeit noch nicht feststeht:
Delphi-Quellcode:
function TForm1.GibMirNenWebsicherenDateinamenZurueck(S: string): string;
// http://www.delphipraxis.net/156698-websichere-dateinamen.html
var
aChr: Char;
insetIndex, i: Integer;
LastSignChanged: Boolean;
slToken: TStringList;
begin
S := Trim(AnsiLowerCase(S));
// Sonderzeichen ersetzen:
slToken := TStringList.Create;
try
StrTokenToStrings(edt3.Text, ',', slToken); // benötigt JCL
for i := 0 to slToken.Count - 1 do
begin
slToken[i] := Trim(slToken[i]);
S := StringReplace(S, slToken.Names[i], slToken.ValueFromIndex[i], [rfReplaceAll]);
end;
finally
slToken.Free;
end;
// ... und dann der Rest:
SetLength(Result, length(S));
insetIndex := 1;
LastSignChanged := false;
for aChr in S do
begin
if (aChr in ['a'..'z']) or
(aChr in ['0'..'9']) or
(aChr in ['A'..'Z']) then
begin
LastSignChanged := false;
Result[insetIndex] := LowerCase(aChr)[1]
end
else
if LastSignChanged then
Continue
else
begin
Result[insetIndex] := '_';
LastSignChanged := true
end;
inc(insetIndex);
end;
SetLength(Result, insetIndex-1);
end;
procedure TForm1.btn1Click(Sender: TObject);
begin
edt2.Text := GibMirNenWebsicherenDateinamenZurueck(edt1.Text);
end;