Range modifications: Difference between revisions

Content added Content deleted
m (sort input)
Line 234: Line 234:
function parse(::Type{RangeSequence}, s)
function parse(::Type{RangeSequence}, s)
seq = UnitRange[]
seq = UnitRange[]
entries = split(s, r"\s*,\s*")
entries = sort!(split(s, r"\s*,\s*"))
for e in entries
for e in entries
startstop = split(e, r"\:|\-")
startstop = split(e, r"\:|\-")
Line 288: Line 288:
end
end


function string(r::UnitRange, weird=true)
function print(io::IO, seq::RangeSequence)
r1, r2 = r.start, r.stop
return print(io, join(map(r -> "$(r.start)-$(r.stop)", reduce(seq)), ","))
weird && return "$r1-$r2"
return r1 == r2 ? "$r1" : abs(r1 - r2) > 1 ? "$r1-$r2" : "$r1, $r2"
end
end

print(io::IO, seq::RangeSequence) = print(io, join(map(string, reduce(seq)), ","))



const seq = parse(RangeSequence, "")
const seq = parse(RangeSequence, "")
Line 340: Line 335:
println(" removed 9 => ", seq3)
println(" removed 9 => ", seq3)
removeinteger!(seq3, 7)
removeinteger!(seq3, 7)
println(" removed 7 => ", seq3)
println(" removed 7 => ", seq3, "\n")

println("Parse \"10-25, 1-5, 27-30\" => ", parse(RangeSequence, "10-25, 1-5, 27-30"))
</lang>{{out}}
</lang>{{out}}
<pre>
<pre>
Line 366: Line 363:
removed 9 => 1-5,7-7,10-25,27-30
removed 9 => 1-5,7-7,10-25,27-30
removed 7 => 1-5,10-25,27-30
removed 7 => 1-5,10-25,27-30

Parse "10-25, 1-5, 27-30" => 1-5,10-25,27-30
</pre>
</pre>