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