在列表中读取和存储输入,在TCL / TK脚本中反转列表的顺序



我正在尝试从输入中读取整数,然后将其放入列表中。

之后,反转整数并显示该列表的相反顺序。

问题:所有输入都未存储在列表中。

我希望它在一行中读取许多整数并存储而不是每行读取一个整数。

法典:

#! /bin/env tclsh
set l1 {}
while 1 {
   # reads input
   set data [gets stdin]  
                          # issue (reads only once per line)
                          # issue (want to make it read many integers in 1 line)
   if {[eof stdin] || [scan $data "%d" myint] != 1} {
       break
   }
   # adds input to list
   lappend l1 $myint  
}
set l2 {}
# make a list 2 with integers in REVERSED order
for {set i [llength $l1]} {$i >= 0} {incr i -1} { 
   lappend l2 [lindex $l1 $i]
}
# print both lists to compare
puts $l1
puts $l2
% proc getNum {} {
        while 1 {
                set data [gets stdin]
                # Extracting only digits which are whole word
                # i.e.  100 -> accepted
                # i.e.  100a -> Not accepted
                set numbers [regexp -all -inline {md+M} $data]
                # If the list is empty, then break out of the loop
                if {$numbers eq {}} {break}
                append l1 "$numbers "
        }
        puts "Input : $l1"
        # Using in-built command 'lreverse' to reverse the list elements
        puts "Reversed : [lreverse $l1]"
}
% getNum
109 865 17 36
444 2019 56
8 19 test100 11
a
Input : 109 865 17 36 444 2019 56 8 19 11
Reversed : 11 19 8 56 2019 444 36 17 865 109
%

参考 : 反向

此命令可以从命令行参数或标准输入读取。

proc getNum args {
    if {[llength $args] > 0} {
        set data $args
    } else {
        while {[gets stdin line]} {
            append input $line n
        }
        set data [split [string trim $input]]
    }
    set numbers [lmap item $data {
        if {[string is integer -strict $item]} {
            set item
        } else {
            break
        }
    }]
    return [lreverse $numbers]
}
% getNum 1 2 3 4
# => 4 3 2 1
% getNum
1 2 3
4 5 6
789
# => 789 6 5 4 3 2 1

如果有参数,它会使用这些参数。否则,它会从输入中读取,将给定到文件末尾的所有行组合在一起,然后将文本拆分为一个列表。

然后,它会检查数据列表中是否存在与整数的字符串定义匹配的项目。签出的所有项目都将添加到结果列表中。一旦它找到整数以外的内容(或当数据列表结束时),它就会停止并返回以相反顺序找到的数字。

文档:>(操作员),附加破得到如果长度,lmap(对于Tcl 8.5),LMAP,l反向,过程,返回设置分裂字符串而

相关内容

  • 没有找到相关文章

最新更新