Quickbasics Mid$ als Funktion nur für Ascii, Unicode ???

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Quickbasics Mid$ als Funktion nur für Ascii, Unicode ???

Beitrag von hjbremer »

Funktioniert nur für Ascii , also in Compileroptionen Unicode aus

Was muß man ändern, damit das auch mit Unicode funktioniert ?

Begreif das leider nicht so ganz !

Code: Alles auswählen

; siehe http://de.wikibooks.org/wiki/Quick_Basic:_Mid
 
; Beispiel Quickbasic
; 
; zeichenkette$ = "Das ist eine schwer zu verstehende Sache"
; MID$(zeichenkette$, 14, 6) = "leicht"
; Ausgabe: "Das ist eine leicht zu verstehende Sache"


DeclareModule StringBefehle
   
   ; Alle Elemente in diesem Abschnitt sind für den Zugriff von außerhalb verfügbar
   
   EnableExplicit
   
   Declare.i Midstrg(*p_ori, abposi, neu$, anzChar)
   
   Macro MIDSTRING(a,b,c,d=#PB_All)   
      Midstrg(@a,b,c,d)
   EndMacro
   
EndDeclareModule

Module StringBefehle
   
   EnableExplicit
   
   Structure MID_CHAR     
      StructureUnion
         s.s {1}[0]
         c.c [0]
      EndStructureUnion   
   EndStructure 
      
   
   Procedure.i Midstrg(*p_ori, abposi, neu$, anzChar)
      
      Protected j, neulg = Len(neu$)
      
      If anzChar = 0
         ProcedureReturn
      ElseIf anzChar = #PB_All
         anzChar = neulg   
      ElseIf anzChar > neulg
         neu$ = LSet(neu$, anzChar)
      EndIf
      
      Protected *ori.MID_CHAR = *p_ori + abposi - 1
      Protected *neu.MID_CHAR = @neu$
      
      For j = 0 To anzChar - 1             
         If *ori\c[j] > 0
            *ori\s[j] = *neu\s[j]
         EndIf 
      Next   
      
   EndProcedure
   
EndModule

UseModule StringBefehle


Define a$ = "Das ist eine schwer zu verstehende Sache" 

MIDSTRING(a$, 14, "leicht")

Debug a$
Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: Quickbasics Mid$ als Funktion nur für Ascii, Unicode ???

Beitrag von Danilo »

Zeile:

Code: Alles auswählen

      Protected *ori.MID_CHAR = *p_ori + abposi - 1
ändern zu:

Code: Alles auswählen

      Protected *ori.MID_CHAR = *p_ori + (abposi - 1)*SizeOf(Character)
Wenn man mit Pointern arbeitet ist bei Ascii das nächste Zeichen 1 Byte weiter, und bei Unicode eben 2 Byte weiter.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Re: Quickbasics Mid$ als Funktion nur für Ascii, Unicode ???

Beitrag von hjbremer »

Uuups, so einfach. Ich werde die Unicodesache wohl nie lernen, gabs halt früher nicht.

Vielen Dank :praise:
Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Benutzeravatar
Rings
Beiträge: 978
Registriert: 29.08.2004 08:48

Re: Quickbasics Mid$ als Funktion nur für Ascii, Unicode ???

Beitrag von Rings »

hjbremer hat geschrieben:Uuups, so einfach. Ich werde die Unicodesache wohl nie lernen, gabs halt früher nicht.

Vielen Dank :praise:
Klasse Artikel über Hintergründe zu Unicode:
http://www.joelonsoftware.com/articles/Unicode.html
Rings hat geschrieben:ziert sich nich beim zitieren
Antworten