RosettaCodeData/Task/Stream-merge/Tcl/stream-merge.tcl
2023-07-01 13:44:08 -04:00

20 lines
509 B
Tcl

#!/usr/bin/env tclsh
proc merge {args} {
set peeks {}
foreach chan $args {
if {[gets $chan peek] > 0} {
dict set peeks $chan $peek
}
}
set peeks [lsort -stride 2 -index 1 $peeks]
while {[dict size $peeks]} {
set peeks [lassign $peeks chan peek]
puts $peek
if {[gets $chan peek] > 0} {
dict set peeks $chan $peek
set peeks [lsort -stride 2 -index 1 $peeks]
}
}
}
merge {*}[lmap f $::argv {open $f r}]