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:
//nachtrag:
da war schon wieder wer schneller
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.

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