tcl相关内容
假设我想从列表中获取所有 5 个字母的单词. 设置词{苹果香蕉葡萄梨桃}lmap word $words {if {[string length $word] == 5} {expr {"$word"}} else continue}# ==>苹果葡萄桃 我对 expr {"$word"} 的引用混乱不满意.我希望这会奏效: lmap word $words {if {[string len
..
我在使用 Tcl 时遇到了一些问题.我有一个变量,里面有一个字符串.现在我希望这个字符串是下一个变量的名称. 我在网上发现了一些类似的问题,但这些都是关于将一个变量的值放到另一个变量中的.不使用它作为变量的名称. 以下是帮助解释的示例代码: foreach 键 [数组名称 ::openedFiles] {puts $::openedFiles($key)设置文件名 [文件尾 $
..
我有一个目录,其中包含一些通过脚本修改的文件,因此它们的 mtime 仅相差几毫秒.file mtime filename 命令以秒为单位给出了上次修改时间,这对我没有帮助.如何以毫秒精度获得他们的最后修改时间? 解决方案 看起来最简单的方法是编写 Tcl 扩展在 C 中以您需要的精度获得文件修改时间.这其实很简单. 编写代码... #define USE_TCL_STUBS#in
..
我无法使用 Visual Studio 2017 (15.5.x) 编译 Tcl/Tk.我可以编译2010年到2013年的代码. 使用 msvc 2017 编译 tkStubLib.c 文件时出现以下错误 C:\Program Files (x86)\Windows Kits\10\include\10.0.16299.0\um\winnt.h(20062):错误 C2059:语法错误
..
C 的 stdlib.h 中有诸如 atof 和 atoi 之类的标准函数,用于将字符串转换为浮点数/整数(并执行也反转).Tcl 中是否有这样的等价物,或者我是否需要编写自己的流程来执行这些任务? 解决方案 在 Tcl 中一切都是字符串,但函数需要一个数字(如 expr)将使用该“字符串"作为整数: % set str " 123 "123% set num [expr $str*2]
..
C 的 stdlib.h 中有诸如 atof 和 atoi 之类的标准函数,用于将字符串转换为浮点数/整数(并执行也反转).Tcl 中是否有这样的等价物,或者我是否需要编写自己的流程来执行这些任务? 解决方案 在 Tcl 中一切都是字符串,但函数需要一个数字(如 expr)将使用该“字符串"作为整数: % set str " 123 "123% set num [expr $str*2]
..
TCL_LIBRARY 和 TK_LIBRARY 环境变量可用于绑定 Tkinter 与正确的 Tcl/Tk 安装. 如何从工作的 Tkinter 实例中获取 Tcl/Tk 的位置? (我正在使用 Tkinter 在非虚拟 Python 中运行前端,我需要在虚拟环境中运行 tkinter 子进程.虚拟 Python 找不到 Tcl/Tk.我可以指定 TCL_LIBRARY 和 TK_L
..
我有这样的代码: ...proc myProc {first last} {for { set i $first } { $i [glob ./../myDir/${i_cur}*]}} 当我运行它时,任何在数字后面没有任何内容的文件都可以正常运行.但如果数字后面有东西,那就没有了.例如,我有名为
..
我的顶层中有一个 ttk::progressbar(唯一的 .),我通过以下函数更新: proc 进度 {x} {全球计划设置 prog [expr fmod(($prog +$x),100)]更新空闲任务} prog 是通过 -variable 选项绑定到进度条的变量. 如果我将注意力集中在我的窗口上,一切都会正常.如果我切换到另一个窗口,进度条将停止更新,即使我切换回我的应用程序也不
..
我在 C++ 代码中使用 Tcl_StringCaseMatch 函数进行字符串模式匹配.一切正常,直到输入模式或字符串具有 [] 括号.例如,像: str1 = pq[0]模式 = pq[*] Tcl_StringCaseMatch 不起作用,即为上述输入返回 false.模式匹配中如何避免[]? 解决方案 问题是 [] 是模式匹配中的特殊字符.您需要使用反斜杠将它们转义以将它们
..
我想在 TCL 中将以下错误消息设置为变量并与来自网络交换机的错误消息进行比较,绕过特殊字符 使用 [slot/port] 或 ["portname"] 或 [slot/*] 或 [*]. 我是这样试的 set x "使用 \[slot/port] 或 \["portname"] 或 \[slot/\*] 或 \[\*]." 但我在运行脚本时收到以下消息: 引号后的额外字符执
..
在我的 TCL 脚本中,我使用了几个我没有源代码的过程.所有这些过程都执行一些任务并输出大量消息.但我只想完成任务,我想抑制消息.有没有办法做到这一点. 例如,我想运行这样的程序: my_proc $arg1 $arg2 $arg3 并抑制所有消息.任何解决方法/智能替代方案都值得赞赏. 更多信息:我正在使用一个自定义 shell,它将一个 TCL 文件作为参数并运行它.在这个自定
..
在我的主 tcl 脚本中,我调用了一个包含在 catch 命令中的 tcl proc.这个 proc 又调用了 10 个以上的 proc. 当这 10 个 proc 中的任何一个执行错误时,TCL 仍会按预期继续执行我的主脚本,我只能查看我捕获的错误消息.此错误消息可能/可能不具有决定性,足以确定 10 个 proc 中的哪一个在执行期间出错. 有没有办法继续捕获所有标准输出直到出现错
..
如何打印执行TCL脚本的行号? #!/usr/bin/tclsh设置一个“100"b组“200"设置 c [expr $a + $b]puts [info script] ;# 它将显示正在执行的脚本名称.# 同样,我需要打印脚本行号.看跌 $c 解决方案 你必须使用 info frame 来简单地完成这项工作. 信息帧?编号? 此命令提供对堆栈上所有帧的访问,甚至是那些在信息级别隐藏的
..
我想在 Tcl 中打印数组的内容(用于调试).顺序不重要,我只想打印每个值. 我该怎么做? 解决方案 最简单的方法是使用 数组: % array set val [list a 1 b 2 c 3]% 阵列值val(a) = 1val(b) = 2val(c) = 3 如果你只想要键和值,那么,使用循环和 数组获取: foreach {key value} [array get
..
我们有一些 Tcl/Tk 脚本(因为我们使用的 GUI 只能在 Tcl 中合并宏).我刚刚修改了其中之一,并想对其进行测试. 我们使用 Test::More 来测试 Perl 模块,并在网页上使用了一点 Selenium,但我们从来没有为我们的 Tcl/Tk 脚本提供任何类型的自动测试设备. 我试过搜索,但因为 Tcl 的最初目的是为了测试,我发现很难找出是否有任何关于测试 Tcl/T
..
我在使用 egrep 命令时遇到问题.当我在 tcsh 中执行我的命令时,它运行良好,但是当我从 tcl 脚本或 tclsh 中执行它时,我得到: 子进程异常退出 我的 tcl 代码: exec egrep -i "^(\\\s+)?(tvf::)?LAYOUT\\\s+PATH" test_file test_file 包含 布局路径“file1"布局路径“file2"//布局
..
据我所知,在 tcl 中,如果要将命名数组传递给函数,则必须通过被调用主体内的 upvar 命令访问调用者的上层范围.这是在 tcl 中传递数组的唯一方法吗? 解决方案 正如 Michael 所指出的,有几种方法,另外还有一个 wiki 页面来讨论它.只是为了在这里获得一些信息,一些选项是: 由 Upvar proc by_upvar {&arrName} {upvar 1 ${&
..
有没有办法拆分字符串并保存在列表中?如何拆分字符串并保存在两个列表中例如,我有一个字符串,我用 = 分割了几个字符串: a=1b=2c=3d=4 然后我想创建两个这样的列表 [a,b,c,d] 和 [1,2,3,4]: 解决方案 以下是简单的tcl代码 set s "a=1\nb=2\nc=3\nd=4"set s [拆分 $s "\n"]foreach e $s {设置 e [
..
我有两个 tcl 脚本.我想在第一个脚本完成后运行第二个脚本.我该怎么做? 解决方案 取决于你的真正意思. 一种方法是编写第三个(“主")脚本 source/the/path/to/the/first.tcl源/the/path/to/the/second.tcl 另一种方法是将上述示例中对 source 的第二个调用添加到第一个脚本的底部. 对第一种方法的修正:如果要执行
..