![]() |
internetfähigen Namen erstellen
Hallo Wissende!
Ich möchte mich durch eine Liste, gefüllt mit Bildpfaden durchkämpfen und diese konvertieren und unter einem internetkonformen namen speichern. Das heisst alle Leerzeichen, Sonderzeichen und sonstigen nicht erwünschten Zeichen durch EIN Zeichen (von mir aus "_") ersetzen. Gibt es für dieses Vorhaben schon was fertiges oder muss man sich in einer Funktion jeden einzelnen Buchstaben des Bildnamen vornehmen? |
Re: internetfähigen Namen erstellen
Hi torud,
da wirst du dich wohl oder übel selbst durchkämpfen müssen. Ich kenne keine Funktion die das macht. Greetz alcaeus |
Re: internetfähigen Namen erstellen
Wenn dir die Liste als Strings vorliegt, dann schau dir mal
StringReplace an. Bsp:
Delphi-Quellcode:
Sollte dir die List in einer TStringList vorliegen, sollte das Ganze sogar in einem Ruck gehen,
NewPath := StringReplace (OldPath,' ','_',[rfReplaceAll,rfIgnoreCase]) ;
Delphi-Quellcode:
Habs aber nicht ausprobiert.
SL.text := StringReplace (SL.text,' ','_',[rfReplaceAll,rfIgnoreCase]) ;
|
Re: internetfähigen Namen erstellen
Hallo!
Nur um nochmal sicher zu gehen, würde ich gern von checken lassen, ob ich da nicht was falsch mache! Ich rufe nun zum Erzeugen eines "sauberen" Namens folgende Funktion auf:
Delphi-Quellcode:
Nun wollte ich wissen, ob man den Aufruf für die Zeichen "&" und "-" nicht auch in einem Rutsch durchführen kann. Oder ist es so übersichtlicher!?
function MakePicName(OldPicName:string):String;
begin Result:=''; with Form1 do begin if chk_names_safety.Checked then begin Result := StringReplace (OldPicName,'&','_',[rfReplaceAll,rfIgnoreCase]) ; Result := StringReplace (OldPicName,'-','_',[rfReplaceAll,rfIgnoreCase]) ; end; if chk_names_spaces.Checked then begin Result := StringReplace (OldPicName,' ','_',[rfReplaceAll,rfIgnoreCase]) ; end; end; end; |
Re: internetfähigen Namen erstellen
Moin torud,
erstens ist es so übersichtlicher, zweitens geht es AFAIK nicht in einem Rutsch. Du musst allerdings noch die deutschen Umlaute ersetzen, manche Webserver haben die gar nicht gern. Greetz alcaeus |
Re: internetfähigen Namen erstellen
oh ja, die hätte ich beinahe vergessen!
|
Re: internetfähigen Namen erstellen
Delphi-Quellcode:
Ist hier nicht was falsch? IMHO dürfte nach diesen beiden Aufrufen nur das '-' ersetzt worden sein. Der erste Aufruf wird überschrieben. Man müsste das Ergebnis aus dem 1. Aufruf zwischenspeichern:
...
Result := StringReplace (OldPicName,'&','_',[rfReplaceAll,rfIgnoreCase]) ; Result := StringReplace (OldPicName,'-','_',[rfReplaceAll,rfIgnoreCase]) ; ...
Delphi-Quellcode:
Gruß
...
OldPicName:= StringReplace (OldPicName,'&','_',[rfReplaceAll,rfIgnoreCase]) ; Result := StringReplace (OldPicName,'-','_',[rfReplaceAll,rfIgnoreCase]) ; ... Christian |
Re: internetfähigen Namen erstellen
Das stimmt, hab ich auch komplett übersehn :wall:
StringReplace gibt den String mit Ersetzungen als Ergebnis zurück, das heißt das Ergebnis eines StringReplace muss als Input für den nächsten verwendet werden. Also auch z.B.:
Delphi-Quellcode:
Greetz
Result := StringReplace(OldPicName,'&','_',[rfReplaceAll,rfIgnoreCase]);
Result := StringReplace(Result,'-','_',[rfReplaceAll,rfIgnoreCase]); Result := StringReplace(Result,'ä','_',[rfReplaceAll,rfIgnoreCase]); Result := StringReplace(Result,'Ä','_',[rfReplaceAll,rfIgnoreCase]); Result := StringReplace(Result,'ö','_',[rfReplaceAll,rfIgnoreCase]); Result := StringReplace(Result,'Ö','_',[rfReplaceAll,rfIgnoreCase]); Result := StringReplace(Result,'ü','_',[rfReplaceAll,rfIgnoreCase]); Result := StringReplace(Result,'Ü','_',[rfReplaceAll,rfIgnoreCase]); Result := StringReplace(Result,'ß','_',[rfReplaceAll,rfIgnoreCase]); alcaeus |
Re: internetfähigen Namen erstellen
Zitat:
![]() Du brauchst nur noch eine "Delphi freundliche" Kapselung darum. |
Re: internetfähigen Namen erstellen
Noch ne Variante:
Delphi-Quellcode:
Achtung ungetestet. Vom Prinzip her sollte es aber funktionieren und ist wesentlich schneller, als viele StringReplace :coder:
const
InvalidChars = ['&',' ','ä','ö' ... ] . . . result:=OldPicName; for i:=1 to length(result) do begin if result[i] in InvalidChars then result[i]:='_'; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:50 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 by Thomas Breitkreuz