我想在TCL中设置以下错误消息作为变量,并通过传递特殊字符与来自网络交换机的错误消息进行比较
使用[slot/port]或[“portname”]或[slot/*]或[*]
我试过这样做
set x "Use \[slot/port] or \["portname"] or \[slot/\*] or \[\*]."
但我在运行脚本时收到以下消息:
结束引号后的额外字符
执行时
请帮忙。谢谢大家! 如果使用双引号,还必须转义“内部”引号:
或者使用大括号,避免完全逃跑
set x {Use [
标签: Tcl
expectactivestate
当我尝试在Windows上使用expect解释器的C实现(expect543.dll)运行expect脚本时,出现错误“无法设置”::exp::winnt\u debug”:父命名空间不存在。
但是,如果我通过ActiveState命令tclsh运行同一个脚本,它就可以正常工作
脚本中的语句“set::exp::winnt_debug 1”是导致错误的原因。
你知道原因是什么以及如何解决吗
请在下面查找代码
package require Expect
set ::exp::winnt_debu
我有一个tcl代码,它为一些参数生成一些值。现在我想存储这些值,并将它们与同一个程序但不同的参数一起使用。怎么做呢?要在整个程序的一次运行中存储一个值,请将其放入变量中
set theVariable "the value is foo bar"
要在以后的程序运行中存储值,可能需要将其写入文件。最简单的方法如下:
# To store:
set f [open theSettingsFile.dat w]
puts $f $theVariable
close $f
Tcl作为Tcl,您还可
我使用的脚本没有Tk。当我添加Tk时,一行被视为窗口的路径,我不明白为什么
错误信息类似于:
坏窗口路径名“*日志目录:D:/tests/Log/2016\u 10\u 13\u 17\u 30\u 29”
当执行这一行时:
message "* Log directory: ${dirname}"
dirname解析为目录路径,例如:
D:/tests/log/2016_10_13_17_30_29
消息是记录到文件的简单过程:
proc message {text} {
glob
在tcl命令中使用双引号而不是大括号时有什么不同。例如:
regsub "$something" $var1 "$something2" var1
vs
但问题并不局限于regsub。即使在使用set赋值给变量时,我也看不出有什么区别 双引号和大括号用于将单词组合成一个参数。双引号和大括号之间的区别在于引号允许在组中发生替换,而大括号阻止替换。此规则适用于命令、变量和反斜杠替换
使用双引号和大括号分组
set s Hello
=> Hello
puts stdout "The lengt
我有此命令,无法更改:
proc command1 {} {
global var_command1
if {$var_command1 == "" } {
puts "nothing..."
} else {
puts $var_command1
}
}
我想将此变量发送到此命令:
set myvar 10
set var_command1 "global myvar; Result= \$myvar"
command1
我想创建几个对象,所有对象都具有相同的参数,所以我尝试将它们存储在一个返回它们的进程中。但是解释器将返回的结果作为一个参数而不是几个参数进行评估。我的程序是:
proc element_param {} {
return "-filled 1\
-visible 1\
-linewidth 1\
-linecolor yellow\
-fillcolor yellow\
-relief roundraised
我想在ttk::treeview中添加复选框
我读了一些文档,发现无法添加复选框以添加到ttk::treeview。还有其他选择吗?treeview小部件不够复杂,不需要做很多工作也不行。(您可以通过定义检查行和未检查行的样式并使用绑定在它们之间进行切换来近似实现此功能……但这将非常可怕和脆弱。)是的,这意味着您无法使用它完成所有操作,但这反过来也使小部件的API更易于学习。这总是一个棘手的设计权衡
您最好的选择可能是,它有一个声誉,就是能够做任何您可能想到的任何事情,您可能想要做的树(或表,或
我有两个数组
id_array :{2 1 1 2 3 1 2}
type_array :{apple apple orange orange pineapple pineapple pineapple}
我希望处理上述数组,并根据ID和类型将以下内容分组:
苹果2
苹果1
橙色12
菠萝3
菠萝12欢迎来到Stack Overflow。通常,我们喜欢看到用户试图解决他们自己的问题,因为这有助于将注意力集中到未来访问者可能发现有用的特定模糊或误解上。然而,我们通常也愿意提供帮助:
Tcl有
我尝试了其他东西,比如catch等,但无论在哪里,它都会返回@number。我的目标是能够打印实际值,而不是数字-xyz_______________________________
我是tcl的新手。想了解一下,这是一个数组还是指向数组的指针之类的东西。当我用不同的命令尝试完全相同的事情时,它只返回一个值,然后它就工作了。这是一个新命令,返回括号中的值
请帮忙。谢谢。每个Tcl命令都会生成一个结果值,您可以通过将该命令的调用放在[方括号]中并将整个批次作为另一个命令的参数的一部分来捕获和使用该
我需要在输入通道关闭后执行一些操作。这一事件说:
文件事件处理程序在其通道关闭时也会自动删除
因此,如果通道已关闭,则可能不会调用处理程序来处理此问题。实际上,我在尝试读取子进程的输出时可以看到它:上一次调用handler时仍将[eof$fd]视为false,而下一次调用则从未调用过
我现在能想象的唯一方法是实施一些黑客行为,比如定期检查$fd是否仍然打开,但这相当肮脏。我是否可以确定,当打开其他读取通道时,$fd不会得到相同的值?我认为这里需要一些澄清。当文档说“频道关闭”时,它意味着“您的节
我有一张这样的清单
set val [ list Fa2/0/1 Fa2/0/24 Gi1/0/13 Gi1/0/23 Gi1/1/1 Gi2/0/1 ]
现在我想把它放在一个循环中,在每个范围内执行一些命令
像
我无法得到这项工作的输出应该像ech对或奇异值发现
someproc Fa2/0/1 - 24
someproc Gi1/0/13 - 23
someproc Gi1/1/1 - 1 #for singular values
someproc Gi2/0/1 - 1
编
请考虑以下模式:
PPP(GJ) {
__hj_o:
}
什么是与上述模式匹配的正则表达式?Tcl的正则表达式可以包含换行符,但对于任何复杂的内容,都可以将其放入自己的变量中,而不是将其作为内联文本:
set RE {PPP(GJ) {
__hj_o:
}}
if {[regexp $RE $someString]} {
# We got a match!
}
事实上,regexp也将与上述内容匹配
我想找到传感器网络中的邻居节点列表。如果有人能为我提供一个tcl脚本示例,那将是非常有帮助的。谢谢#邻居节点计算
# neighbor node calculation
set nbr [open Neighbor w]
puts $nbr "\t\t\t\t\tNeighbor Detail"
puts $nbr "\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
puts $nbr "\tNode\t\tNb node\t\tNode-Xpos\tNode-Ypos
我有点困惑。我已经建立了一个字典和一个嵌套字典
这是它的“布局”
。
.
在一个“dict for”命令中,我想提取等级值——我无法让它工作。
如果我不在指令范围内,我可以使用
set tmp [dict get $Courses 044262 grade]
但是在dict中,因为我无法让它工作…尝试了许多$key或$val的组合,有或没有$符号
我做错了什么(如果有人能推荐一本有问题的好书/在线教程进行培训,那就太好了!)对于您的特定词典,每个循环都有一本属于自己的词典。然后,您就可以使
我想生成以下tcl命令,参数以树结构传递
proc find { args } {
array set opt {-do "" -delete ""}
foreach {key value} $args {
if {![info exists opt($key)]} {
error "Wrong type '$key' The argument must have "
}
set opt($key) $va
在TCL中使用以下方法创建列表有什么区别:
[list a b c]
vs
我当然不是一个有经验的TCL程序员,但到目前为止,我遇到的唯一区别是当创建多行列表时,第一种样式需要使用行延续字符,如:
[list \
a \
b \
c \
]
这很好:
{
a
b
c
}
还有其他区别吗?哪一种被认为是更好的风格还是更地道
在创建包含嵌套列表的复杂列表时,第二种样式似乎是唯一干净的方法。主要区别在于使用list命令可以在定义列表时使用变量。请注
在软件开发中,能够找到函数的调用者通常非常有用,因为这是了解代码如何工作以及程序的其他部分对函数的期望的方法。cscope可以找到函数的调用者和被调用者,但它不是编译器,它通过在文本中搜索关键字来实现这一点
我想知道tcl中是否有这样的实用程序?因为在tcl中可以很容易地在运行时生成代码,而且许多API都使用回调,所以很难静态地确定从何处调用命令。简单地搜索代码可能是最简单的方法(在Unix上使用递归的grep,在Windows上使用findstr/s)
但是,在运行时确定从何处调用命令要容易得
我试图用列表在TCL中编写一个非常简单的程序
下面是清单
list { 1 2 3 4 5 6 1.5 7 }
下面是我的代码
set sum 0
for {set i 0} {$i < [llength $list]} {incr i} {
incr sum [lindex $list $i]
}
puts $sum
设置总和0
对于{set i 0}{$i
我想自动化以下场景:
登录路由器
装填
重新加载路由器时,连续按ESP键
按ESP键时,将出现boot>提示。在本例中执行一些命令
我可以使用“Teraterm”和控制台手动执行上述操作。但是如何在TCL脚本中实现这一点
请帮我做这个
谢谢,
Balu P.您首先需要找到一个可以从中发出命令的交互式控制台程序。您可能会发现PuTTY套件中的plink.exe非常合适。系统telnet.exe不合适,因为它上面设置了一个防止自动化的特殊标志,TeraTerm不合适,因为据我所见,它是一个GUI程序
我想使用tcl regexp在文件中查找字符串/*后面不跟/的行。
例如:
/* some note
...
...
//
.
.
///*
/*
结果应该是第一行和最后一行。忽略//*这在您的示例中确实有效,但如果/*不在行的开头,则无效:
set a "/* some note
...
...
//
.
.
///*
/*"
set re
Tcl解析器给出错误,无效的命令名*
我想在TCL中处理*
[a*]很好,因为它返回(a*)(这是一条注释,但我需要答案的格式)
您只是没有定义名为*的进程:
$ tclsh
% * foo bar baz
invalid command name "*"
% proc * {args} {puts [lreverse $args]}
% * foo bar baz
baz bar foo
你的问题不清楚。你想干什么?
args是从另一个TCL文件调用的脚本
proc handler { args } {
if { [catch {eval $args} errorMessage] } {
_report_error "$errorMessage"
}
}
proc是\u阈值\u百分比{thresholdValue}{
#这里有一些代码
如果{[string是双严格的$threshold]&&$threshold
标签: Tcl
language-features
是否有任何编程语言的一切都是字符串。例如,让我们考虑一下这个TCL片段(注释显示了C/java中的等价语句),例如
实际上,这与C或Java等语言的情况相反;在这里,我们默认键入的是文字字符串,除非它是一个“特殊”字或前面有$sign(在这种情况下,$后面的字符串是一个变量)。我想说,您的示例与C或Java没有太大的区别。这种宽松的语法在shell脚本语言中并不少见,只需要一个足够聪明的预处理器就可以让它在C语言中使用。Lisp宏在反引号表达式中具有“一切都是文字,除非我说它应该被计算”的语义
我在main.sv中定义了以下值,只需设置一次:
logic [31:0] random_number;
我不想浪费资源在合成的HDL中随机化这个值,所以我想到我可能可以在Tcl脚本中这样做。我的目标是:
使用Tcl脚本重写HDL文件,初始化值如下:
logic[31:0]随机数=32'd1057
使用Tcl脚本将值设置为预钩子中的网络
不幸的是,我不知道如何使用tcl来做这些事情。任何建议都将不胜感激。如果导线由恒定值驱动,则无论该值如何计算,都不会浪费任何资源。合成器将计算它并分配给您的导
通过使用Tcl。例如,我有数据
hello;world;123
test;code;456
我只想得到第一列的值并将其写入另一个文本文件。输出将是这样的
hello
test
您只需读取输入文件:
set pfi [open "file_name" "r"]
set cnt [gets $pfi row]
然后过滤第一个单词:
set word [lindex [split $row ";"] 0]
然后写入输出文件
set pfo [open "file_out_name" "w"]
我正在tcl中向一个文件写入多行代码。虽然我写出来很成功,但也希望在几行之后有一个空行,并为每一行添加注释
puts $fileId "$tmpdir\t;# a comment and a blank line\n"
puts $fileId "$tmpdir\n# a comment on its own line and then a blank line\n"
puts $fileId "# a comment, a command invocation, and a blank l
我正在写一个代码,当它检测到字符串中的“-”时,它会做某事。当我这样做时:
switch [string index $code $j] {
"-" { set mem($ptr) [expr $mem($ptr) - 1] ; }
但Tcl将其解释为“-”作为开关选项前缀:
bad option "-": must be -exact, -glob, -regexp, -command procname or --
我试图用另一个字符替换“-”:
regsub -all "-" $
我需要从文本文件的前n行(大约50行)中提取一些字符串值。在某些情况下,文件是gzip文件,而在某些情况下则不是
目前,我正在使用以下方法读取文件,但这会读取整个文件,并且处理非常大的文件的速度很慢
set f [open "| zcat -f $filename" r]
如果文件不是gzip文件,那么这似乎可以正常工作,而且速度相当快
set f [open "| head -n 50 $filename" r]
但是当它被gzip压缩时,我似乎不能只看到前n行。我已经试过了,但是在tcl
我得到一个数组:
array set arrayA {1 a 3 b 2 x 4 g}
如何在不更改顺序的情况下获得输出
foreach {key value} [array get arrayA] {
puts $key
puts $value
}
如何得到下面的输出,谢谢
1
a
3
b
2
x
4
g
Tcl数组不保留其元素的插入顺序(但DICT保留)。要按顺序列出元素,您需要提供所需的顺序,例如通过排序:
set my_order [lsort -integer [
我正在编写TCL代码,我想将一个文件拆分为两个列表,
该文件包含:
(1,2) (3,4) (5,6)
(7,8) (9,10) (11,12)
我想要两份清单
每行一个,包含列表,每个列表包含两个数字
例如:
puts $list1 #-> {1 2} {3 4} {5 6}
puts [lindex $list1 0] #-> 1 2
puts [lindex $list2 2] #-> 11 12
我尝试使用rege
我在一个NFS v3文件系统上遇到了一个奇怪的问题(我觉得这很重要),它并行运行两个进程(根据下面的评论和我自己在这方面的知识,我认为语言不重要,我认为这足够可读):
对于那些不熟悉的人来说,tcl中的文件mkdir的行为与mkdir-p非常相似-只有当目录存在且不是目录时,它才会失败。我几乎100%(从来没有100%)认为在任何进程中都没有创建该文件,只有文件mkdir。问题并不总是发生,但在进行回归时,我们可能会遇到以下问题:
Error: can't create directory "$
我有一个expect脚本正在运行;其中包括以下几行:
expect "\[Y\]\> "
send "n\r"
我正在与之交互的操作系统发生了变化,我现在有一个混合的盒子环境。现在有些人有“[Y]>”,有些人有“[1]>”在我试图处理的问题上
我尝试将代码更改为:
expect {
"\[Y\]\> " { send "n\r";exp_continue }
"\[1\]\> " { send "2\r";exp_continue }
}
但
如果不是,那是什么
我读到的关于TCL的所有内容都表明,TCL中的所有内容都只是一个字符串。解释器内部可以有一些其他类型和结构(为了提高性能),但在TCL语言级别,一切都必须像字符串一样运行。还是我错了
我正在使用一个名为Vivado的用于FPGA编程的IDE。TCL自动化在那里得到了积极的应用。(TCL版本仍然是8.5,如果有帮助的话)
Vivado的TCL脚本依赖于某种“面向对象”系统。Web搜索不会在其他地方显示此系统的任何痕迹。
在这个系统中,对象通常通过“get_*”命令从内部数据库获
我想在Tcl中找到一种很好的方法来检测协同进程的结束。考虑:
coroutine cor apply {{} {
yield 1
yield 2
yield 3
}}
try {
puts [cor]
puts [cor]
puts [cor]
puts [cor]
} trap {TCL LOOKUP COMMAND cor} {e} {
puts "done"
}
这是可行的,但它感觉像一个黑客,它是脆弱的。如果我重命名co
我是tcl的新手,我有以下数字:
设置一个565056236086
设置b 488193341805
$a/$b的输出为1157443552992375
当我使用以下代码时
set num[expr{double(round(100*$a/$b))/100}]
输出为:1,15
但是我想要1.16,我怎么能这样圆呢?在进行操作之前,您需要将a或b设置为双精度。另外,round返回一个整数,因此您也需要将其转换为double,或者除以double:
set num [expr {round(100
我不熟悉tcl脚本。我有一个以上格式的txt文件。使用tcl脚本,我必须将字符串(节、名称、标记和缺勤天数)存储在不同的变量中,以存储在csv文件中。
我尝试在下面的代码中搜索关键字
Loop = (
{
Value = (
{
{
Key :
{
A = "B";
C = "D";
Cla
我有一个Expect proc,它为telnet登录发送命令,并发送命令。在telnet进程中,我执行TFTP。该文件的大小为10MB。
但是telent提示符不会等到提示符出现,而是等待超时时间
然后就走了
我们有没有办法在Expect中等待提示
问候,,
Mithun如果tftp文件传输的时间超过预期的默认超时(10秒),则需要先设置更长的超时。例如,对于60秒的超时,请使用以下命令启动脚本:
set timeout 60
要获得更详细的帮助,您最好发布您的Expect脚本。如果tftp文
我想在tcl脚本中使用以下命令:
sed -n '452,$ { /wire/ {p;q} }' /tmp/foo
为此,我将此命令更改如下:
set MIDLINE2 [ exec sed -n {1134,$ {/wire/{=;q}}} foo.txt ]
它给了我正确的答案,但在1134处,我想使用变量$MIDLINE,它的值为1134。我该怎么做?请提出一些建议。这是一个简单的报价问题。您正在使用大括号来禁止变量替换。由于需要变量替换,所以需要使用其他方法
set MIDLINE
谁能帮我比较一下tcl中的两个字母数字值
如果说我有两个版本的值
set val1 "2.1.a"
set val2 "1.2.a"
如果我想得到两个值的最大值,即$val1(根据上面的例子),我该怎么做
除了逐字比较,还有什么办法吗
可能的值集:
1.0
1.1a
1.2.3f
2.1
提前感谢。尝试以下操作:
set val1 "2.1.a"
puts $val1
set val2 "1.2.a"
puts $val2
puts [string compare $val2 $val1]
在一个tcl程序中,我试图执行一个程序,该程序使用进行输入。我找到了答案,命令必须写成
puts [exec "./program" < inputfile]
我找到了答案,命令必须写为
puts [exec "./program" < inputfile]
Tcl可以自行处理重定向,因此您可以编写:
puts [exec ./program <inputfile]
否则,它试图将整个事件解释为一个有点奇怪的文件名;在Unix上是合法的,在Windows上不是,但不是您想
我的目标是能够使用笔记本电脑的触摸屏作为桌面的输入设备
我理想的做法是在笔记本电脑上运行一个全屏Tk程序,接收触摸屏输入,并使用套接字将数据转发到桌面上的服务器,该服务器将使用TWAPI将输入转换为Windows事件
不幸的是,Tk似乎没有处理多点触控;据我所知,它像对待鼠标一样对待输入。是我错了,还是事情就是这样?Tcl中是否有适合此功能的选项?非常好的问题。不知道;我没有支持多点触摸的硬件上的Tk…我确信使用twapi和/或Ffidl是可能的。但我没有带Tk的多点触控设备。
要解析日志文件,我想做如下操作
跟踪文件
一段时间后,编写解析数据并执行其他操作
这是我的(示例)脚本
拖尾工作正常,但未触发之后的脚本
#!/usr/bin/tclsh
proc readfile {fd} {
global done
puts "READ FILE CALLED..."
gets $fd line; # Removed 'while' loop here
puts "->>>>$line<<<<&l
我正在尝试使用TK包在tcl中创建一个窗口
该窗口由4个文本小部件和一个菜单栏组成
(像这样:)
但我想让窗户最大限度地靠近屏幕
我试图通过以下方式做到这一点:
设置宽度小[expr{int([winfo screenwidth.]*0.25}]
text.main\
-宽度$宽度小-高度$高度大\
但这样做的结果是窗口比屏幕更宽
这怎么可能
proc buildUI {} {
global widthsmall
global widthbig
global he
我是TCL编程的新手。
我的问题是我有多个文本文件
(例如:sysDataUpdate\u 1119041809\u 1.sql,sysDataUpdate\u 1119041809\u 2.sql…sysDataUpdate\u 1119041809\u 50.sql)位于目录“ABC”中
现在,我需要一个具有最高编号的.sql文件,如“sysDataUpdate\u 1119041809\u 50.sql”?使用glob列出文件,并使用lsort-dictionary将它们按您描述的顺序排列
我有一个带有标签、条目和按钮的小部件
我想把它们放在一个实验室框架内,以便更具意义和直观的理解
我已经在一个小部件上网格化了我的标签、按钮和条目,现在我不能使用packforlabelframe。有没有办法在我的条目、按钮和标签周围添加labelframe
摘自我的代码:
grid .top.d.f2.a0 -row 3 -column 2 -sticky nsew -padx 2 -pady 2 -ipadx 2 -ipady 2
grid .top.d.f2.a -row 4 -column
我试图使用命令行参数将参数传递给Spirent测试中心工具,在这里我传递插槽、端口、帧大小和负载。我想在阵列中存储插槽和端口,其中端口数是动态的。
我尝试了使用cmdline编写的简单代码,它可以处理固定端口
package require cmdline
set parameters {
{s.arg "" "Slot"}
{p.arg "" "Port"}
{l.arg "100" "Load"}
{f.arg "256" "Framesiz
我正在寻找一种在文本文件中搜索字符串的解决方案,比如说“Hello”,每次在文本文件中找到“Hello”,它都会跳到下一行并将整行打印到新的文本文件中
文本文件内容示例:
Hello
password:xxxxx user:xxxxx
Foo
password:xxxx user:xxxxxx
Foo
password:xxxxx user:xxxxx
Hello
password:xxxxx user:xxxxx
Foo
password:xxxx user:xxxx
你好
密码:xxxxx用
我正在尝试通过vivado命令行编程我的digilent FPGA。打开硬件服务器后,我可以按如下方式对设备进行编程
program_hw_devices [get_hw_devices xc7a100t_0]
然后,如果我运行put[get_hw_devices xc7a100t_0]它会输出xc7a100t_0,这让我觉得我应该可以做一些类似编程_hw_devices xc7a100t_0的事情。但是这失败了,我得到了以下输出
错误:[Common 17-161]无效选项
为“硬件设备”指
我试图在花括号内执行变量替换,我知道这在TCL中是不可行的
我正在尝试的代码:
interface code -clip {$x1 $y1 $x2 $y2}
接口代码是第三方TCL函数,它有一个名为clip的选项,该选项读取大括号内的x1、y1、x2、y2坐标
我需要在花括号中输入x1,y2的值。在Tcl中,{…}语法在技术上意味着“在这个问题上根本不进行替换”。值被传递到的命令可能会对这些字符执行自己的操作,这些操作看起来很像替换(例如,如果它将单词作为脚本进行计算,这就是if和for和wh
上一页 1 2 3 4 5 6 ...
下一页 最后一页 共 70 页