Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi "=F6" = "ö". Gibt es dafür eine Routine? (https://www.delphipraxis.net/34101-%3Df6-%3D-oe-gibt-es-dafuer-eine-routine.html)

hitzi 17. Nov 2004 16:27


"=F6" = "ö". Gibt es dafür eine Routine?
 
Hallo,

gibt es für die Umwandlung von "=HH" (HH=Hexwert) zum String eine Routine?
Der Hexwert repräsentiert den Ansicode für den jeweiligen Buchstaben. Diese Werte werden in einer vCard (Outlook, Handy) für Sonderzeichen verwendet.

Dax 17. Nov 2004 16:30

Re: "=F6" = "ö". Gibt es dafür eine Rout
 
Es geht ungefähr so:
Delphi-Quellcode:
MyChar := Chr(StrToInt(Copy(Code, 2, 2)))
So wandelst du dein "=F6" in ein "ö" um. Das Copy ist da, um zu vermeiden, dass das "=" auch der StrToInt-Funktion übergeben wird.

Steve 17. Nov 2004 16:31

Re: "=F6" = "ö". Gibt es dafür eine Rout
 
Hi,

für "Hex zu String" gibts IntToStr, natürlich mit einem $ vor der HexZahl (z.B. IntToStr($F6); )
Für "Code zu Buchstabe" gibts Chr (z.B. Chr(22) bzw. Chr($F6) )
Oder habsch Dich falsch verstanden? :gruebel:

Gruß
Stephan :dance:

sakura 17. Nov 2004 16:37

Re: "=F6" = "ö". Gibt es dafür eine Rout
 
Zitat:

Zitat von Steve
einem $ vor der HexZahl (z.B. IntToStr($F6); )

Fast, da fehlen noch die Hochkommata ;-)
Delphi-Quellcode:
IntToStr('$F6');
...:cat:...

Steve 17. Nov 2004 16:39

Re: "=F6" = "ö". Gibt es dafür eine Rout
 
Zitat:

Zitat von sakura
Zitat:

Zitat von Steve
einem $ vor der HexZahl (z.B. IntToStr($F6); )

Fast, da fehlen noch die Hochkommata ;-)
Delphi-Quellcode:
IntToStr('$F6');
...:cat:...

Dann wärs ein String, und somit für den umgekehrten Weg, StrToInt, richtig.. :wink:

Gruß
Stephan

hitzi 17. Nov 2004 16:41

Re: "=F6" = "ö". Gibt es dafür eine Rout
 
Ja aber es kann auch das "=" Zeichen im Text vorkommen ohne dass eine Hexzahl dahinter stehen muss. Der einzige Hinweis darauf ist, dass in der Zeile der Text "ENCODING=QUOTED-PRINTABLE" vorkommst.

Hier mal eine Beispielzeile: N;ENCODING=QUOTED-PRINTABLE:Richter;S=F6ren

Steve 17. Nov 2004 16:42

Re: "=F6" = "ö". Gibt es dafür eine Rout
 
Delphi-Quellcode:
IF POS('ENCODING=QUOTED-PRINTABLE',ZuPruefenderString)>0 THEN...
Gruß
Stephan

hitzi 17. Nov 2004 16:47

Re: "=F6" = "ö". Gibt es dafür eine Rout
 
Das ist mir schon alles klar.

Hier mein Lösungsansatz (welcher aber nicht funktioniert - der steigt bei einem Except aus der While Schleife aus):

Delphi-Quellcode:
 
  [...]
  s:= Line;
  Line := '';
  while Pos('=', s) > 0 do begin
    Fehler := false;
    i := 0;
    try
      i := StrToInt('$' + copy(s, Pos('=', s) + 1, 2));
    except
      Fehler := true;
    end;
    if not Fehler then begin
      Line := Line + Copy(s, 1, Pos('=', s) - 1) + Chr(i);
      s := Copy(s, Pos('=', s) + 3, length(s));
    end else begin
      Line := Line + '=';
      s := Copy(s, Pos('=', s) + 1, length(s));
    end;
  end;
  Line := Line + s;

shmia 17. Nov 2004 16:53

Re: "=F6" = "ö". Gibt es dafür eine Rout
 
Hier ist ein geschwindigkeitsoptimierte Funktion dafür:
Delphi-Quellcode:
function UnEscapeString(const Value: string; EscapeChar:Char): string;
var
   pSrc,pSrcEnd: PChar;
   pDst,pDstBeg: PChar;
begin
   SetLength(Result,Length(Value));

   if Length(Result) = 0 then
      Exit;

   pSrc   := @Value[1];
   pSrcEnd := @Value[Length(Value)];

   pDstBeg := @Result[1];
   pDst   := @Result[1];

   while pSrc <= pSrcEnd do
   begin
      if pSrc^ = EscapeChar then
      begin
         Inc(pSrc);
         HexToBin(pSrc,pDst,2);
         Inc(pSrc,2);
      end
      else
      begin
         pDst^ := pSrc^;
         Inc(pSrc);
      end;
      Inc(pDst);
   end;

   SetLength(Result,pDst-pDstBeg);
end;

hitzi 17. Nov 2004 17:02

Re: "=F6" = "ö". Gibt es dafür eine Rout
 
Danke. Deine Routine funktioniert :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:31 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-2025 by Thomas Breitkreuz