iterator split*(s: string, sep: char): var string =
var last = 0
var res = newstring(256)
if len(s) > 0:
while last <= len(s):
var first = last
while last < len(s) and s[last] != sep:
inc(last)
let len = last-first
if len < 1:
res.setLen 0
else:
res.setLen len
copymem res[0], s[first].addr, L
yield res ##yield substr(s, first, last-1)
inc(last)
const str = """
Hello
hello
hello
"""
for x in str.split('\L'):
echo x.len, " \"", x, '"'
aXRlcmF0b3Igc3BsaXQqKHM6IHN0cmluZywgc2VwOiBjaGFyKTogdmFyIHN0cmluZyA9CiAgdmFyIGxhc3QgPSAwCiAgdmFyIHJlcyA9IG5ld3N0cmluZygyNTYpCiAgYXNzZXJ0KCdcMCcgIT0gc2VwKQogIGlmIGxlbihzKSA+IDA6CiAgICB3aGlsZSBsYXN0IDw9IGxlbihzKToKICAgICAgdmFyIGZpcnN0ID0gbGFzdAogICAgICB3aGlsZSBsYXN0IDwgbGVuKHMpIGFuZCBzW2xhc3RdICE9IHNlcDogCiAgICAgICAgaW5jKGxhc3QpCiAgICAgIAogICAgICBsZXQgbGVuID0gbGFzdC1maXJzdAogICAgICBpZiBsZW4gPCAxOgogICAgICAgIHJlcy5zZXRMZW4gMAogICAgICBlbHNlOgogICAgICAgIHJlcy5zZXRMZW4gbGVuCiAgICAgICAgY29weW1lbSByZXNbMF0sIHNbZmlyc3RdLmFkZHIsIEwKICAgICAgeWllbGQgcmVzICMjeWllbGQgc3Vic3RyKHMsIGZpcnN0LCBsYXN0LTEpCiAgICAgIGluYyhsYXN0KQoKY29uc3Qgc3RyID0gIiIiCkhlbGxvCgoKaGVsbG8KaGVsbG8KCiIiIgoKZm9yIHggaW4gc3RyLnNwbGl0KCdcTCcpOgogIGVjaG8geC5sZW4sICIgXCIiLCB4LCAnIicKCg==