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 internetfähigen Namen erstellen (https://www.delphipraxis.net/33369-internetfaehigen-namen-erstellen.html)

torud 5. Nov 2004 19:51


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?

alcaeus 5. Nov 2004 19:53

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

Jelly 5. Nov 2004 20:03

Re: internetfähigen Namen erstellen
 
Wenn dir die Liste als Strings vorliegt, dann schau dir mal

StringReplace

an. Bsp:
Delphi-Quellcode:
NewPath := StringReplace (OldPath,' ','_',[rfReplaceAll,rfIgnoreCase]) ;
Sollte dir die List in einer TStringList vorliegen, sollte das Ganze sogar in einem Ruck gehen,
Delphi-Quellcode:
SL.text := StringReplace (SL.text,' ','_',[rfReplaceAll,rfIgnoreCase]) ;
Habs aber nicht ausprobiert.

torud 10. Nov 2004 08:57

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:
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;
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!?

alcaeus 10. Nov 2004 10:08

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

torud 10. Nov 2004 10:10

Re: internetfähigen Namen erstellen
 
oh ja, die hätte ich beinahe vergessen!

Bowler 10. Nov 2004 11:31

Re: internetfähigen Namen erstellen
 
Delphi-Quellcode:
...
            Result := StringReplace (OldPicName,'&','_',[rfReplaceAll,rfIgnoreCase]) ;
            Result := StringReplace (OldPicName,'-','_',[rfReplaceAll,rfIgnoreCase]) ;
...
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:

Delphi-Quellcode:
...
            OldPicName:= StringReplace (OldPicName,'&','_',[rfReplaceAll,rfIgnoreCase]) ;
            Result := StringReplace (OldPicName,'-','_',[rfReplaceAll,rfIgnoreCase]) ;
...
Gruß
Christian

alcaeus 10. Nov 2004 11:38

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:
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]);
Greetz
alcaeus

shmia 10. Nov 2004 12:33

Re: internetfähigen Namen erstellen
 
Zitat:

Zitat von torud
...einem internetkonformen namen...
Gibt es für dieses Vorhaben schon was fertiges ...

In der WinINet.DLL gibt es die Funktion InternetCanonicalizeUrl.
http://msdn.microsoft.com/library/de...icalizeurl.asp
Du brauchst nur noch eine "Delphi freundliche" Kapselung darum.

jim_raynor 10. Nov 2004 12:37

Re: internetfähigen Namen erstellen
 
Noch ne Variante:

Delphi-Quellcode:
const
  InvalidChars = ['&',' ','ä','ö' ... ]

.
.
.

result:=OldPicName;
for i:=1 to length(result) do
begin
  if result[i] in InvalidChars then
    result[i]:='_';
end;
Achtung ungetestet. Vom Prinzip her sollte es aber funktionieren und ist wesentlich schneller, als viele StringReplace :coder:


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:04 Uhr.
Seite 1 von 2  1 2      

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