Umfrage: Stringoperation

Für allgemeine Fragen zur Programmierung mit PureBasic.
johnnysnet
Beiträge: 26
Registriert: 05.11.2006 22:01
Kontaktdaten:

Umfrage: Stringoperation

Beitrag 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)
Benutzeravatar
#NULL
Beiträge: 2237
Registriert: 20.04.2006 09:50

Beitrag 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
my pb stuff..
Bild..jedenfalls war das mal so.
KeyPusher
Beiträge: 52
Registriert: 04.10.2006 10:56

Beitrag 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?
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
#NULL
Beiträge: 2237
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

weil dann der null-char schluß macht.

<edit:> ..bzw, weil dann der null-char immernoch schluß macht. :mrgreen:
my pb stuff..
Bild..jedenfalls war das mal so.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
johnnysnet
Beiträge: 26
Registriert: 05.11.2006 22:01
Kontaktdaten:

Beitrag 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!
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag 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
Antworten