Umwandlung und Vergleich von deutschen Sonderzeichen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Umwandlung und Vergleich von deutschen Sonderzeichen

Beitrag von dysti »

Hey, irgendwie stehe ich total auf´n Schlauch.
Möchte gerne aus einem String die Steuerzeichen austauschen.
Wenn ich ein Sonderzeichen einer Variable zuordne und ausgebe dann erscheint nur "A?" anstatt " ß".
Gebe ich es direkt aus, wird das Zeichen richtig dargestellt.
Wie kann ich die Zeichen vergleichen in der Form if Findstring(Quellstring,"ß")
Das Problem sieht man erst, wenn man den untenstehenden Code in PB hineinkopiert.

Code: Alles auswählen

  eszet.s=" ß"
  ue.s=" ü"
  oe.s=" ö"
  ae.s=" ä"

  UE.s=" Ü"
  OE.s=" Ö"
  AE.s=" Ä"

  Debug " ü"
  Debug ue

  ;- ß - Ü - ü - Ö - ö - Ä - ä
 
 Debug Asc(" ß")
 Debug Asc(" Ü")
 Debug Asc(" ü")
 Debug Asc(" Ö")
 Debug Asc(" ö")
 Debug Asc(" Ä")
 Debug Asc(" ä")
 
 Debug " ß" + " - " + eszet
 Debug " Ü" + " - " + UE
 Debug " ü" + " - " + ue
 Debug " Ö" + " - " + OE
 Debug " ö" + " - " + oe
 Debug " Ä" + " - " + AE
 Debug " ä" + " - " + ae
 
 Debug "Anrede,Vorname,Nachname,E-Mail-Adresse,E-Mail 2: Adresse,Straße (privat),Postleitzahl (privat),Ort (privat),Bundesland (privat),Land (privat),Telefon (privat),Telefon privat 2,Mobiltelefon,Fax (privat),UM-Nr.,Webseite (privat),Titel,Position,Firma,E-Mail 3: Adresse,Webseite (geschäftlich),Straße (geschäftlich),Postleitzahl (geschäftlich),Ort (geschäftlich),Bundesland (geschäftlich),Land (geschäftlich),Telefon (geschäftlich),Telefon geschäftlich 2,Mobiltelefon 2,Fax (geschäftlich),UM-Nr. (geschäftlich)"

 quellstring.s="Anrede,Vorname,Nachname,E-Mail-Adresse,E-Mail 2: Adresse,Straße (privat),Postleitzahl (privat),Ort (privat),Bundesland (privat),Land (privat),Telefon (privat),Telefon privat 2,Mobiltelefon,Fax (privat),UM-Nr.,Webseite (privat),Titel,Position,Firma,E-Mail 3: Adresse,Webseite (geschäftlich),Straße (geschäftlich),Postleitzahl (geschäftlich),Ort (geschäftlich),Bundesland (geschäftlich),Land (geschäftlich),Telefon (geschäftlich),Telefon geschäftlich 2,Mobiltelefon 2,Fax (geschäftlich),UM-Nr. (geschäftlich)"
 
 Debug FindString(quellstring,"ß")
 Debug FindString(quellstring,"ß",65)
 
 Debug FindString(quellstring,eszet)
 Debug FindString(quellstring,eszet,65)
Zuletzt geändert von dysti am 05.06.2015 11:32, insgesamt 1-mal geändert.
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Umwandlung und Vergleich von deutschen Sonderzeichen

Beitrag von RSBasic »

Wo bekommst du diese Zeichenketten her? Ist es nicht sinnvoller, den Zeichensatz in der Quelle anzupassen, damit die Sonderzeichen/Umlaute korrekt zurückgegeben werden, so dass du diesen Workaround erst gar nicht machen musst?

PS: Du kannst unter Datei > Datei-Format festlegen, ob Reintext oder UTF8. Ansonsten kannst du von den einzelnen Zeichen den Characterwert ermitteln und mit Chr(CharValue) arbeiten.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Re: Umwandlung und Vergleich von deutschen Sonderzeichen

Beitrag von dysti »

Ist es nicht sinnvoller, den Zeichensatz in der Quelle anzupassen
Geht leider nicht. Ich muß ihn so verarbeiten
Ansonsten kannst du von den einzelnen Zeichen den Characterwert ermitteln und mit Chr(CharValue) arbeiten.
Den Characterwert ermitteln habe ich probiert wenn du ASC() meinst. Hilft auch nicht weiter.
Chr(CharValue) arbeiten
Genau das möchte ich erreichen.

Komme trotz deines Hinweises auch nicht weiter. :oops:
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Umwandlung und Vergleich von deutschen Sonderzeichen

Beitrag von RSBasic »

Versuchs mal damit: http://slayeroffice.com/tools/ascii/

Wobei folgender Code bei mir funktioniert:

Code: Alles auswählen

Debug ReplaceString("Straße", "ß", "ß")
\\Edit:
Die beste Lösung findest du unten, siehe Code von matbal.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
HeX0R
Beiträge: 3040
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Re: Umwandlung und Vergleich von deutschen Sonderzeichen

Beitrag von HeX0R »

Wo kommen die Texte denn her?
Das sieht doch nach UTF-8 aus, da muss man doch nichts von Hand ersetzen?!
matbal
Beiträge: 261
Registriert: 30.03.2011 20:53

Re: Umwandlung und Vergleich von deutschen Sonderzeichen

Beitrag von matbal »

Dein Text sieht aus, als hättest du UTF8 gespeicherten Text als ASCII eingelesen.
Das ließe sich auch im nachhinein rückgängig machen, indem du ihn als ASCII ließt und als UTF schreibst.

Code: Alles auswählen

Text$ = "Anrede,Vorname,Nachname,E-Mail-Adresse,E-Mail 2: Adresse,Straße (privat),Postleitzahl (privat),Ort (privat),Bundesland (privat),Land (privat),Telefon (privat),Telefon privat 2,Mobiltelefon,Fax (privat),UM-Nr.,Webseite (privat),Titel,Position,Firma,E-Mail 3: Adresse,Webseite (geschäftlich),Straße (geschäftlich),Postleitzahl (geschäftlich),Ort (geschäftlich),Bundesland (geschäftlich),Land (geschäftlich),Telefon (geschäftlich),Telefon geschäftlich 2,Mobiltelefon 2,Fax (geschäftlich),UM-Nr. (geschäftlich)"

*buf = AllocateMemory(StringByteLength(Text$, #PB_Ascii))

PokeS(*buf, Text$, -1, #PB_Ascii)   ; als ASCII in den Buffer schreiben
Text$ = PeekS(*buf, -1, #PB_UTF8)   ; als UTF8 wieder auslesen

FreeMemory(*buf)

Debug Text$
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Re: Umwandlung und Vergleich von deutschen Sonderzeichen

Beitrag von dysti »

@matbal, das scheint die einfachste Lösung zu sein.
Werde berichten, ob es so geht.
Es handelt sich, unschwer zuerkennen, um eine CSV-Datei.
Obiger ist der Steuersatz.
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Re: Umwandlung und Vergleich von deutschen Sonderzeichen

Beitrag von Josh »

Seit wann mach PB einen Unterschied zwischen Variablen mit Namen ue und UE
matbal
Beiträge: 261
Registriert: 30.03.2011 20:53

Re: Umwandlung und Vergleich von deutschen Sonderzeichen

Beitrag von matbal »

dysti hat geschrieben: Es handelt sich, unschwer zuerkennen, um eine CSV-Datei.
Aber dann kannst du doch die Zeilen gleich als UTF8 einlesen:

Code: Alles auswählen

Text$ = ReadString(1, #PB_UTF8)
Benutzeravatar
HeX0R
Beiträge: 3040
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Re: Umwandlung und Vergleich von deutschen Sonderzeichen

Beitrag von HeX0R »

Hier fehlt übrigens noch ein Byte:

Code: Alles auswählen

*buf = AllocateMemory(StringByteLength(Text$, #PB_Ascii))
Also:

Code: Alles auswählen

*buf = AllocateMemory(StringByteLength(Text$, #PB_Ascii) + 1)
Antworten