Autor |
Beitrag |
Esaias
Hält's aus hier
Beiträge: 3
|
Verfasst: Mi 18.10.06 14:40
Hallo,
ich bin dabei eine Textdatei umzuwandeln, in der Umlaute etc als \'f6, also als Hex-Zeichen angegeben sind. Wie kann ich diese Zeichen dann wieder in die Normalen Codes umwandeln? Also zB 'F' und '6' in 'ö'??
Danke..!
|
|
AXMD
      
Beiträge: 4006
Erhaltene Danke: 7
Windows 10 64 bit
C# (Visual Studio 2019 Express)
|
Verfasst: Mi 18.10.06 15:01
Schau dir mal die Funktion Chr() an.
AXMD
|
|
cuejo
      
Beiträge: 142
Win XP
Delphi 7 Personal und 2005 PE
|
Verfasst: Mi 18.10.06 16:45
Schreib ein $ davor, dann weiß delphi, dass es sich um eine hexadezimale Zahl handelt. Also z.B. $F6.
_________________ Computer sind dumm, aber fleißig. Deshalb arbeite ich so gerne damit.
|
|
Esaias 
Hält's aus hier
Beiträge: 3
|
Verfasst: Mi 18.10.06 19:04
Das $ davorschreiben funktioniert aber nur bei einer im Quelltext verankerten Größe. Ich habe aber nur eine Variable, in die ich die "Zeichenkette" für Hex schreibe, und die ich dann in ein Ascii-Zeichen umwandeln will.
Habe jetzt einfach eine eigene Lösung erstellt:
Die jeweiligen Hex-Zeichen schreibe ich zunächst in einen String, zum Beispiel "S = 'f6'" (Der String wird aber, je nach ausgelesenen Zeichen, generiert).
Diesen nehme ich dann berechtigterweise als Hex an, und wandle ihn in Integer um, um das jeweilige Zeichen darstellen zu lassen:
Delphi-Quelltext 1:
| Memo1.Text := Memo1.Text + Chr(HexToInt(UpperCase(R))); |
HexToInt ergibt sich aus:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| function HexToInt(HS: String): Integer; var z,ah: Integer; begin ah := 0; for z := 1 to length(HS) do case HS[z] of '1': ah := ah+StrToInt(FloatToStrF(1*Power(16,(length(HS)-z)),fffixed,4,0)); '2': ah := ah+StrToInt(FloatToStrF(2*Power(16,(length(HS)-z)),fffixed,4,0)); '3': ah := ah+StrToInt(FloatToStrF(3*Power(16,(length(HS)-z)),fffixed,4,0)); '4': ah := ah+StrToInt(FloatToStrF(4*Power(16,(length(HS)-z)),fffixed,4,0)); '5': ah := ah+StrToInt(FloatToStrF(5*Power(16,(length(HS)-z)),fffixed,4,0)); '6': ah := ah+StrToInt(FloatToStrF(6*Power(16,(length(HS)-z)),fffixed,4,0)); '7': ah := ah+StrToInt(FloatToStrF(7*Power(16,(length(HS)-z)),fffixed,4,0)); '8': ah := ah+StrToInt(FloatToStrF(8*Power(16,(length(HS)-z)),fffixed,4,0)); '9': ah := ah+StrToInt(FloatToStrF(9*Power(16,(length(HS)-z)),fffixed,4,0)); 'A': ah := ah+StrToInt(FloatToStrF(10*Power(16,(length(HS)-z)),fffixed,4,0)); 'B': ah := ah+StrToInt(FloatToStrF(11*Power(16,(length(HS)-z)),fffixed,4,0)); 'C': ah := ah+StrToInt(FloatToStrF(12*Power(16,(length(HS)-z)),fffixed,4,0)); 'D': ah := ah+StrToInt(FloatToStrF(13*Power(16,(length(HS)-z)),fffixed,4,0)); 'E': ah := ah+StrToInt(FloatToStrF(14*Power(16,(length(HS)-z)),fffixed,4,0)); 'F': ah := ah+StrToInt(FloatToStrF(15*Power(16,(length(HS)-z)),fffixed,4,0)); end; Result := ah; end; |
Nicht schön, aber selten. Auf eine bessere / überhaupt eine andere Lösung bin ich nicht gekommen, da Delphi zwar freilich $f6 als 'ö' darstellt, aber nicht, wenn '$f6' der Inhalt eines Strings ist.
|
|
Martok
      
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: Mi 18.10.06 19:10
Delphi-Quelltext 1: 2: 3: 4: 5:
| var c:char; s:string; begin c:=chr(StrToInt('$'+s)); end; |
So wars sicherlich gemeint. StrToInt kann selber Hexwerte, aber eben nur mit $ davor. Chr macht dann aus dem ermittelten Wert(246) einen Buchstaben (ö).
Martok
_________________ "The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
|
|
Lannes
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: Mi 18.10.06 19:42
Hallo,
kann es sein das Deine Textdatei eine RTF-Datei ist,
denn eine Codierung in der Art \'f6 wird im RTF-Code genutzt.
Sollte das zutreffen, gibt es wahrscheinlich eine einfachere Möglichkeit die Datei in normalen Text umzuwandeln.
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
Esaias 
Hält's aus hier
Beiträge: 3
|
Verfasst: Mi 18.10.06 21:02
Martok hat völlig Recht, genau diesen Code habe ich gesucht. Werde also meine Funktion wieder rausschmeißen. Danke!
Auch richtig ist, dass ich eine .rtf-Datei als Textdatei auslese, um mir Informationen zu extrahieren. Mein Telefonmanager hat archivierte SMS als *.rtf gespeichert, die (in Word) nur den eigentlichen text enthalten und im Header, also versteckt, Details wie Datum, Zeit, Absender usw.
Lese dazu die Zeilen aus, hangel mich zur entsprechenden Stelle und sichere mir die Informationen daraus. Ich zeige also nicht die .rtf an sich an 
|
|
|