Brace expansion using ranges: Difference between revisions
Content added Content deleted
(→{{header|Go}}: Updated in line with Wren example.) |
Alpha bravo (talk | contribs) (Added AutoHotkey) |
||
Line 275: | Line 275: | ||
</pre> |
</pre> |
||
=={{header|AutoHotkey}}== |
|||
<lang AutoHotkey>Brace_expansion_using_ranges(line){ |
|||
needle := "^.*\K{(?P<Start>[^{}]+?)\..(?P<End>[^{}]+?)(?:\..(?P<Incr>[^{}]+?))?}" |
|||
while true |
|||
{ |
|||
while pos := RegExMatch(line, needle, m, A_Index=1?1:pos+StrLen(m)) |
|||
{ |
|||
char := false, step := "", output := "" |
|||
reverse := InStr(mIncr, "-") ? true : false |
|||
if mStart is number |
|||
pad1 := pad(mStart), pad2 := pad(mEnd), pad := StrLen(pad1)>=StrLen(pad2) ? pad1 : pad2 |
|||
else |
|||
mStart := Ord(mStart), mEnd := Ord(mEnd), char := true |
|||
mIncr := (mIncr?Abs(mIncr):1) * (mStart>mEnd?-1:1) |
|||
loop % Abs((mStart-mEnd)/mIncr) + 1 |
|||
{ |
|||
step := mStart + (A_Index-1) * mIncr |
|||
step := pad <> "" ? SubStr(pad . step, 1-StrLen(pad)) : step |
|||
step := char ? Chr(step) : step |
|||
Rep := StrReplace(line, m, step) |
|||
output := reverse ? rep "`n" output : output .= Rep "`n" |
|||
} |
|||
output := Trim(Output, "`n") |
|||
} |
|||
if RegExMatch(output, needle) |
|||
line := output |
|||
else |
|||
break |
|||
} |
|||
return output ? output : line |
|||
} |
|||
pad(num){ |
|||
if RegExMatch(num, "`am)^(0+)(?=[1-9]|0$)", m) |
|||
loop % StrLen(num) |
|||
pad .= "0" |
|||
return pad |
|||
}</lang> |
|||
Examples:<lang AutoHotkey>data= |
|||
( |
|||
simpleNumberRising{1..3}.txt |
|||
simpleAlphaDescending-{Z..X}.txt |
|||
steppedDownAndPadded-{10..00..5}.txt |
|||
minusSignFlipsSequence {030..20..-5}.txt |
|||
reverseSteppedNumberRising{1..6..-2}.txt |
|||
combined-{Q..P}{2..1}.txt |
|||
emoji{🌵..🌶}{🌽..🌾}etc |
|||
li{teral |
|||
rangeless{}empty |
|||
rangeless{random}string |
|||
) |
|||
for i, line in StrSplit(data, "`n", "`r") |
|||
result .= line " ->`n" RegExReplace(Brace_expansion_using_ranges(line), "`am)^", "`t") "`n`n" |
|||
MsgBox, 262144, , % result |
|||
return</lang> |
|||
{{out}} |
|||
<pre>simpleNumberRising{1..3}.txt -> |
|||
simpleNumberRising1.txt |
|||
simpleNumberRising2.txt |
|||
simpleNumberRising3.txt |
|||
simpleAlphaDescending-{Z..X}.txt -> |
|||
simpleAlphaDescending-Z.txt |
|||
simpleAlphaDescending-Y.txt |
|||
simpleAlphaDescending-X.txt |
|||
steppedDownAndPadded-{10..00..5}.txt -> |
|||
steppedDownAndPadded-10.txt |
|||
steppedDownAndPadded-05.txt |
|||
steppedDownAndPadded-00.txt |
|||
minusSignFlipsSequence {030..20..-5}.txt -> |
|||
minusSignFlipsSequence 020.txt |
|||
minusSignFlipsSequence 025.txt |
|||
minusSignFlipsSequence 030.txt |
|||
reverseSteppedNumberRising{1..6..-2}.txt -> |
|||
reverseSteppedNumberRising5.txt |
|||
reverseSteppedNumberRising3.txt |
|||
reverseSteppedNumberRising1.txt |
|||
combined-{Q..P}{2..1}.txt -> |
|||
combined-Q2.txt |
|||
combined-Q1.txt |
|||
combined-P2.txt |
|||
combined-P1.txt |
|||
emoji{🌵..🌶}{🌽..🌾}etc -> |
|||
emoji🌵🌽etc |
|||
emoji🌵🌾etc |
|||
emoji🌶🌽etc |
|||
emoji🌶🌾etc |
|||
li{teral -> |
|||
li{teral |
|||
rangeless{}empty -> |
|||
rangeless{}empty |
|||
rangeless{random}string -> |
|||
rangeless{random}string</pre> |
|||
=={{header|F_Sharp|F#}}== |
=={{header|F_Sharp|F#}}== |