Nth of String (JS: string[N])
Verfasst: 31.07.2014 20:15
Habe mir mal Gedanken gemacht, wie man den direkten Zugriff auf einen Charakter in einer Zeichenkette ähnlich wie in JavaScript bewerkstelligen kann.
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).
Wichtig ist nur, dass man das @ nicht vergisst.
Aber es scheint dann wenigstens keinen IMA zu geben, sondern direkt einen Compiler Error.
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^^
Code: Alles auswählen
//JavaScript Code
var myString = 'Hallo Welt';
var Fourth = myString(0); // 'H' - Counter startet bei 0
var Fifth = myString(4); // 'o'
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"
Aber es scheint dann wenigstens keinen IMA zu geben, sondern direkt einen Compiler Error.
Zumindest beim Direktzugriff. Bei einem Umweg über Pointer gibt es einen IMA.Parenthesis '(' are not allowed in string operations.
Code: Alles auswählen
*ptr = @myString
*ptr=1 ;Verursacht logischerweise einen IMA
Debug Nth(*ptr, 1)