Seite 1 von 1

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

Verfasst: 05.08.2014 21:34
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$

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

Verfasst: 05.08.2014 21:41
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.

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

Verfasst: 05.08.2014 21:48
von hjbremer
Uuups, so einfach. Ich werde die Unicodesache wohl nie lernen, gabs halt früher nicht.

Vielen Dank :praise:

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

Verfasst: 07.08.2014 09:16
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