getPos() - InStr() trifft Array-Object
Posted: 06 Jun 2022, 06:21
WARNUNG! Hier folgt nun nichts wirklich Welt-bewegendes, und dazu auch noch RegEx-free. So, be it.
InStr() bietet (AFAIK) per default keine Option an, um "zeitgleich" mehrere Nadeln im Heuhaufen zu suchen.
getPos() erlaubt statt eines einzelnen "needle"-string mehrere needles im ["simple","array","object","stil"] zu übergeben.
Rück-/Ausgabe erfolgt dann in Array-Schreibweise, hier dem Beispiel entsprechend: pos.<needle> bzw. pos[needle]
Wird für den 'occurence'-Parameter der Wert '0' gesetzt, enthält die Rückgabe die Gesamtsumme für das (case sensitive) Vorkommen der jeweiligen Nadel im Heuhaufen.
HTH
InStr() bietet (AFAIK) per default keine Option an, um "zeitgleich" mehrere Nadeln im Heuhaufen zu suchen.
getPos() erlaubt statt eines einzelnen "needle"-string mehrere needles im ["simple","array","object","stil"] zu übergeben.
Rück-/Ausgabe erfolgt dann in Array-Schreibweise, hier dem Beispiel entsprechend: pos.<needle> bzw. pos[needle]
Wird für den 'occurence'-Parameter der Wert '0' gesetzt, enthält die Rückgabe die Gesamtsumme für das (case sensitive) Vorkommen der jeweiligen Nadel im Heuhaufen.
Code: Select all
#SingleInstance, Force
; pos := getPos("543boBo21BoBo9876BoBo",[1,5,3,"bobo"],true) ; 9130 (positions of 1/5/3 but non-matching "bobo" (case sensitive: true)
; pos := getPos("543boBo21BoBo9876BoBo","bobo",,,3) ; 18 (position of the 3rd occurrence (case sensitive: false)
; pos := getPos("543boBo21BoBo9876BoBO","o",,,0) ; 2 (total number of needle occurrences within the string ('occurrence'-param = 0)
pos := getPos("543boBo21BoBo9876BoBO",[1,5,3,"bobo","o"],,,0) ; 1:1/5:1/3:1/bobo:0/o:5 (returning <needle>:<number of occurrences>)
for key, value in pos
res .= key " : " value "`n"
MsgBox % res
getPos(haystack,needles,case:=false,start:=1,occ:=1) { ; parameter order identical with AHK's InStr()-function
if !IsObject(needles) ; if 'needles'-parameter isn't an object but a standard entry...
needles := [needles] ; so let's push it into that object.
pos := {} ; create associative array-object to keep each needles position
for key, needle in needles ; "für jede nadel im nadelhaufen"
pos[needle] := (occ=0)
? StrSplit(haystack,needle).Count()-1 ; keeping <keyname>:<no of needle occurrences>
: InStr(haystack, needle,case,start,occ) ; keeping <keyname>:<position>
Return pos ; ...within the returned associative "pos"-array.
}