Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Portierung JavaScript (https://www.delphipraxis.net/155013-portierung-javascript.html)

travis2010 5. Okt 2010 10:08

Delphi-Version: 2010

Portierung JavaScript
 
Hallo
ich versuche zur Zeit den folgenden JavaScript Code nach Delphi zu portieren. Doch leider sind da noch ein paar Dingem die ich nicht hinbekomme.

Code:
<script language="javascript">
function Decoder(s){
var s1=unescape(s.substr(0,s.length-1)); var t='';
for(i=0;i<s1.length;i++)t+=String.fromCharCode(s1.charCodeAt(i)-s.substr(s.length-1,1));
return unescape(t);
}
</script>
Folgenden Code habe ich bereits:
Delphi-Quellcode:
function Decoder(s:String): String;
var
  s1,t: String;
  i: Integer;
begin
  s1 := Copy(s,0,Length(s)-1);
  for i := 0 to Length(s1) - 1 do
  begin
    t := t+'';
  end;
  Result := t;
end;
Wie kann ich jetzt die Funktion "unescape" nachbilden?
Wie portiere ich folgende Zeile "t+=String.fromCharCode(s1.charCodeAt(i)-s.substr(s.length-1,1));"

Vielen Dank für eure Hilfe :)

Satty67 5. Okt 2010 10:47

AW: Portierung JavaScript
 
Ich dachte erst an C-Escape Sequenzen (dafür wäre eine StringReplace Orgie gegangen), aber scheint bei JavaScript eine Umkehrung von Urlencode zu sein. Also mal nach Urldecode suchen.

Ob das alles ist oder doch was anderes... muss ich leider passen. ;)

Sir Rufo 5. Okt 2010 10:51

AW: Portierung JavaScript
 
Weißt du denn was die Funktion
Code:
unescape
in JavaScript macht?

Satty67 5. Okt 2010 11:02

AW: Portierung JavaScript
 
Ach ja, Substring ist Zero-Based, also das
Code:
var s1 = unescape( >>> s.substr(0,s.length-1) <<< );
gibt den kompletten String zurück (weis nicht, warum das gemacht wird)

aber das
Delphi-Quellcode:
s1 := Copy(s,0,Length(s)-1);
.
den String abzüglich des letzten Zeichens(weil ich denke, das Copy aus der 0 automatisch eine 1 macht), vergleichbar wäre wohl
Delphi-Quellcode:
s1 := Copy(s,1, Length(s));
.

Hab' aber noch nicht zu Mittag gegessen, also kann auch gerade falsch liegen.

travis2010 5. Okt 2010 19:46

AW: Portierung JavaScript
 
Erstmal vielen Dank für die Antworten :)

Also das unescape habe ich jetzt über IdURI und URLDecode gelöst.

Zum substr:
Code:
var s='1234567890';
document.write(s.substr(0,s.length-1));
ergibt
123456789
also wird das letzte Zeichen weggelassen.

Jetzt fehlt mir also nur noch
String.fromCharCode
und
charCodeAt

travis2010 5. Okt 2010 20:42

AW: Portierung JavaScript
 
Ich habe es jetzt hinbekommen :)
Hier die komplette Funktion, für die es interessiert:
Delphi-Quellcode:
function Decoder(s:String): String;
var
  s1,t: String;
  i: Integer;
begin
  s1 := UTF8ToString(TIdURI.URLDecode(Copy(s,0,Length(s)-1)));
  for i := 0 to Length(s) - 1 do
  begin
    t := t+CHR(Ord(s1[i])-StrToInt(Copy(s,length(s),1)));
  end;
  Result := TIdURI.URLDecode(t);
end;

Satty67 5. Okt 2010 21:48

AW: Portierung JavaScript
 
Zitat:

Zitat von travis2010 (Beitrag 1053978)
also wird das letzte Zeichen weggelassen.

Ja, war wohl ein Denkfehler. Parameter sind ja nicht von/bis sondern von/anzahl


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:57 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