Seite 1 von 1

Umfrage: Stringoperation

Verfasst: 12.11.2006 15:55
von johnnysnet
Hi,

mich würde mal interessieren, wie ihr vorgehen würdet, wenn es darum geht, ein bestimmtes Zeichen in einem String zu ändern. Als Beispiel soll das dritte Zeichen eines 8 Zeichen langen Strings in das Zeichen von NewChar geändert werden. Ich würde es so machen:

Code: Alles auswählen

String.s  = "00000000"
NewChar.s = "7"
InsPos.l  = 3

String = Left(String, InsPos - 1) + NewChar + Right(String, Len(String) - InsPos)

Verfasst: 12.11.2006 16:01
von #NULL
vielleicht so in der art

Code: Alles auswählen

String.s  = "00000000"

NewChar.c = Asc("7")
InsPos.l  = 3 

Debug String
PokeC( @String+InsPos*SizeOf(Character), NewChar)
Debug String

Verfasst: 12.11.2006 16:03
von KeyPusher
ich so:

Code: Alles auswählen

PokeB(@String+InsPos-1,Asc(NewChar))
//nachtrag:
da war schon wieder wer schneller :o
und ja, hab nicht an unicode gedacht. und wo beginnt der string? bei 0 oder bei 1?

Verfasst: 12.11.2006 16:07
von AND51
wieso nicht einfach PokeS() nehmen? Dann entfällt der umwandlungskram mit Asc()-

Code: Alles auswählen

String.s  = "00000000" 
newChar.s = "3"

PokeS(@String+3, newChar)
Edit: War vor dem absenden des Beitrags wohl zu lange Afk...
Dfür habe ich eine möglichkeit, die sowohl im ASCII- als auch im Unicode-Modu funzen sollte:

Code: Alles auswählen

String.s  = "00000000" 
newChar.s = "3"

PokeS(@String+(3*(1+#PB_Compiler_Unicode)), newChar)
Unicode: 1 zeichen braucht jetzt 2 Byte. Hoffe, hab keinen Denkfehler drin, ungetestet.

Verfasst: 12.11.2006 16:10
von #NULL
weil dann der null-char schluß macht.

<edit:> ..bzw, weil dann der null-char immernoch schluß macht. :mrgreen:

Verfasst: 12.11.2006 16:18
von Kaeru Gaman
ein string beginnt insofern bei 1, dass das 1ste zeichen,
das in allen string-befehlen mit 1 bezeichnet wird,
speichertechnisch betrachtet bei pointer+0 steht.

(InsPos-1) ist also wichtig.

aber natürlich muss man das mit SizeOf multiplizieren.

UND

zusätzlich muss man noch prüfen, ob InsPos + Len( NewChar ) <= Len( String )
sonst schreibt man das in irgendwelche anderen speicherbereiche,
und bekommt günstigstenfalls einen IMA.

Verfasst: 12.11.2006 16:34
von johnnysnet
Da merkt man, was den Anfänger von den Fortgeschrittenen bzw. Profis unterscheidet. Mit solchen eleganten Lösungen hatte ich schon fast gerechnet - gefällt mir. So lernt man dazu!

Verfasst: 12.11.2006 16:37
von edel
dann haste hier noch eine ;-)

Code: Alles auswählen

String.s  = "00000000"
InsPos.l  = 3-1

*text.Character = @String
*text + (InsPos * SizeOf(Character)) 
*text\c = '7'

Debug String