Seite 1 von 1
Ascii Umlaute
Verfasst: 13.10.2012 13:55
von Joel
Hey,
über folgenden Code lese ich eine Datei:
Code: Alles auswählen
OpenFile(1, "C:\users\joel\desktop\test.txt")
string$ = ReadString(1, #PB_Ascii)
Debug string$
der Inhalt der Datei in folgender:
Das Problem ist ich würde gerne das Format umwandeln, sodass statt '#228' ein ä angezeigt wird. Geht das`?
Gruß Joel
Re: Ascii Umlaute
Verfasst: 13.10.2012 15:15
von Kiffi
Joel hat geschrieben:Geht das`?
ja, mit ReplaceString().
Grüße ... Kiffi
Re: Ascii Umlaute
Verfasst: 14.10.2012 12:50
von Joel
Ist aber sehr Umständlich das alles so zu schreiben das alle Sonderzeichen replaced werden. Hat da evtl jemand schon eine Lib oder einen Code geschrieben?
Re: Ascii Umlaute
Verfasst: 14.10.2012 13:21
von Danilo
Code: Alles auswählen
Procedure.s ReplaceAsciiNum(s.s)
Protected *p.Character = @s ; *p = Pointer zum String s.s
Protected retString.s, num.s
While *p\c
If *p\c = 39 ; ' gefunden
*p + SizeOf(Character)
If *p\c = '#' ; '# gefunden
*p + SizeOf(Character)
num.s = ""
While *p\c And *p\c <> 39 ; zahl lesen bis wieder ' gefunden
If *p\c >= '0' And *p\c <= '9'
num + Chr(*p\c)
Else
; illegal input error, keine zahl
EndIf
*p + SizeOf(Character)
Wend
If *p\c = 39
*p + SizeOf(Character) ; ' nach zahl entfernen
EndIf
retString + Chr(Val(num)) ; ASCII-Zahl an retString anhängen
Continue
Else ; '...
retString + Chr(39)
Continue
EndIf
Else
retString + Chr(*p\c) ; andere chars einfach an retString anhängen
EndIf
*p + SizeOf(Character)
Wend
ProcedureReturn retString
EndProcedure
string$ = "Caption = 'test1, test2, St'#228'rke'"; ReadString(1, #PB_Ascii)
Debug string$
Debug ReplaceAsciiNum(string$)
Re: Ascii Umlaute
Verfasst: 14.10.2012 15:05
von Sunny
Ähm... kann sein das ich was wichtiges übersehe aber so macht es sich doch viel leichter oder?
Code: Alles auswählen
Procedure.s MyReplace(String$)
For i = 1 To 255
String$ = ReplaceString(String$, "'#" + Str(i) + "'", Chr(i))
Next
ProcedureReturn String$
EndProcedure
string$ = "Caption = 'test1, test2, St'#228'rke'"
Debug string$
Debug MyReplace(string$)
Re: Ascii Umlaute
Verfasst: 14.10.2012 15:29
von Danilo
Sunny hat geschrieben:Ähm... kann sein das ich was wichtiges übersehe aber so macht es sich doch viel leichter oder?
Code: Alles auswählen
Procedure.s MyReplace(String$)
For i = 1 To 255
String$ = ReplaceString(String$, "'#" + Str(i) + "'", Chr(i))
Next
ProcedureReturn String$
EndProcedure
string$ = "Caption = 'test1, test2, St'#228'rke'"
Debug string$
Debug MyReplace(string$)
Ja, das könnte für Anfänger eventuell leichter zu verstehen sein.
Bei meinem Code wird der String einmal durchgegangen und die Zahlen ersetzt,
bei Deinem Code wird jeder String 255-mal nach allen möglichen Zahlen-Strings durchsucht.
So kann sich Joel nun aussuchen was ihm lieber ist und was er versteht.

Re: Ascii Umlaute
Verfasst: 14.10.2012 22:06
von TheCube
Was meint ihr denn zu dieser Variation (ohne pöse Pointer), aber auch ohne 255-faches durchorgeln des Teststrings:
Code: Alles auswählen
Procedure.s ReplaceAsciiNum_(s.s)
Protected num.s, z.s, l.b, FoundPosS.l, FoundPosE.l
Repeat
FoundPosS+1
FoundPosS = FindString(s, Chr(39)+ "#", FoundPosS) ; '# als Startmarkierung suchen
FoundPosE = FindString(s, Chr(39), FoundPosS+2) ; ' als Endemarkierung suchen
num.s = Mid(s, FoundPosS+2, FoundPosE-FoundPosS-2) ; nur ASCII-Zahl holen ('228')
l= Len(num) ; Nur 1,2 oder 3 Stellen machen Sinn
If l>0 And l<4
z=Chr(Val(num)) ; ASCII-Zahl ('228') in ASCII-Zeichen ('ä') wandeln
s=ReplaceString(s, Mid(s, FoundPosS, FoundPosE-FoundPosS+1), z ,#PB_String_NoCase, FoundPosS)
EndIf
Until FoundPosS=0
ProcedureReturn s
EndProcedure
string$ = "Caption = 'test1, test2, St'#228'rke, B'#252'cher'"; ReadString(1, #PB_Ascii)
Debug string$
Debug ReplaceAsciiNum_(string$)
Wenn ich mich nicht vermessen habe mit dem kleinen integrierten Teststring sogar schneller als Danilo´s Idee. (?)
