Added strscans.scanTuple (#16300)

* Added since and changelog
This commit is contained in:
Jason Beetham
2020-12-12 15:29:20 -07:00
committed by GitHub
parent d15f63a0f2
commit 5a58440ebe
3 changed files with 102 additions and 1 deletions

View File

@@ -227,3 +227,54 @@ block:
if line.scanf("$i-$i $c: $w", lo, hi, c, w):
inc res
doAssert res == 4
block:
#whenscanf testing
let input = """1-3 s: abc
15-18 9: def
15-18 A: ghi
15-18 _: jkl
"""
proc twoDigits(input: string; x: var int; start: int): int =
if start+1 < input.len and input[start] == '0' and input[start+1] == '0':
result = 2
x = 13
else:
result = 0
proc someSep(input: string; start: int; seps: set[char] = {';', ',', '-', '.'}): int =
result = 0
while start+result < input.len and input[start+result] in seps: inc result
var res = 0
for line in input.splitLines:
let (success, lo, hi, c ,w) = scanTuple(line, "$i-$i $c: $w")
if success:
inc res
doAssert res == 4
let (_, key, val, intval, floatVal) = scanTuple("abc:: xyz 89 33.25", "$w$s::$s$w$s$i $f")
doAssert key == "abc"
doAssert val == "xyz"
doAssert intval == 89
doAssert floatVal == 33.25
let (_, binVal, octVal, hexVal) = scanTuple("0b0101 0o1234 0xabcd", "$b$s$o$s$h", binval, octval, hexval)
doAssert binval == 0b0101
doAssert octval == 0o1234
doAssert hexval == 0xabcd
var (xx,_) = scanTuple("$abc", "$$$i")
doAssert xx == false
let (xx2, _) = block: scanTuple("$1234", "$$$i")
doAssert xx2
var (yy, intval2, key2) = scanTuple(";.--Breakpoint00 [output]",
"$[someSep]Breakpoint${twoDigits}$[someSep({';','.','-'})] [$+]$.",
int)
doAssert yy
doAssert key2 == "output"
doAssert intVal2 == 13