Nth of String (JS: string[N])

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Derren
Beiträge: 557
Registriert: 23.07.2011 02:08

Nth of String (JS: string[N])

Beitrag von Derren »

Habe mir mal Gedanken gemacht, wie man den direkten Zugriff auf einen Charakter in einer Zeichenkette ähnlich wie in JavaScript bewerkstelligen kann.

Code: Alles auswählen

//JavaScript Code
var myString = 'Hallo Welt';

var Fourth = myString(0); // 'H' - Counter startet bei 0
var Fifth = myString(4); // 'o'
Heraus gekommen ist das hier. Ich habe versucht PeekC() zu umgehen und direkt per Pointer drauf zuzugreifen (zweckes Geschwindigkeit), aber innerhalb eines Macros ist es mir nicht gelungen. Und in einer Prozedure wäre der Geschwindgeitsvorteil wegen der Rumspringerei wieder weg (denke ich).

Code: Alles auswählen

Macro Nth(_string,pos)
	Chr(PeekC(_string+(pos*SizeOf(Character))))
EndMacro

Define myString.s = "Hallo Welt"

Debug Nth(@"Hallo Welt", 0)	; "H"
Debug Nth(@myString, 4) 	; "o"
Debug Nth(@"PureBasic", 0)	; "P"
Wichtig ist nur, dass man das @ nicht vergisst.
Aber es scheint dann wenigstens keinen IMA zu geben, sondern direkt einen Compiler Error.
Parenthesis '(' are not allowed in string operations.
Zumindest beim Direktzugriff. Bei einem Umweg über Pointer gibt es einen IMA.

Code: Alles auswählen

*ptr = @myString
*ptr=1 ;Verursacht logischerweise einen IMA
Debug Nth(*ptr, 1)
Vielleicht weiß ja einer von den Profies hier, ob/wie man das verbessern kann. Schneller, sicherer, etc. Falls ich nicht der einzige bin, der so eine Funktion nützlich findet^^
Signatur und so
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8679
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Nth of String (JS: string[N])

Beitrag von NicTheQuick »

Wieso wolltest du das @ nicht mit ins Macro schreiben?

Code: Alles auswählen

 Macro Nth(_string,pos)
   Chr(PeekC(@_string+(pos*SizeOf(Character))))
EndMacro

Define myString.s = "Hallo Welt"

Debug Nth("Hallo Welt", 0)   ; "H"
Debug Nth(myString, 4)    ; "o"
Debug Nth("PureBasic", 0)   ; "P" 
Bild
Derren
Beiträge: 557
Registriert: 23.07.2011 02:08

Re: Nth of String (JS: string[N])

Beitrag von Derren »

Frag mich nicht. Daran hab ich gar nicht gedacht. :allright:
Signatur und so
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Re: Nth of String (JS: string[N])

Beitrag von hjbremer »

Code: Alles auswählen

;Zeiger auf Strings

Structure t_CHAR     
   s.s {1}[0]    
EndStructure 

a$ = "Hallo, dies ist ein Test" 

*z.t_char = @a$

For j = 0 To Len(a$) - 1
   Debug *z\s[j]
Next

Debug "----------------------"
Debug "erweitert um Asciicode"

Structure tt_CHAR 
   StructureUnion 
      s.s {1}[0] 
      c.c [0]
   EndStructureUnion 
EndStructure 

a$ = "Hallo, dies ist ein Test" 

*zz.tt_char = @a$

For j = 0 To Len(a$) - 1
   Debug *zz\s[j] + " = " + *zz\c[j]
Next

Debug "-------------"
Debug "Paare aulesen"

Structure t2_CHAR 
      s.s {2}[0] 
EndStructure 

a$ = "Hallo, dies ist ein Test" 

*z2.t2_char = @a$

For j = 0 To (Len(a$) - 1) / 2
   Debug *z2\s[j] 
Next
Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Antworten