Unix 它是什么意思-can';t使用空字符串作为";的操作数*&引用;关于tcl-?如何解决
我有一个TCL脚本,如下所附 代码运行得非常好;我以前测试过几个输入,但是,我有一个输入文件Defect.csv的问题。 我尝试使用unix2dos删除空格、行并转换为unix格式,但是,我遇到了此错误-无法使用空字符串作为“*”的操作数- 我可以看到格式仍然混乱。我认为由于空格的原因,它无法识别“Y”。 我尝试了以下操作以删除空格/选项卡 cat overlappvgsnets.csv | sed's///g' sed's///g'overlappvgsnets.csv 但是,这并不能解决这个问题。有什么建议吗 参见输入Unix 它是什么意思-can';t使用空字符串作为";的操作数*&引用;关于tcl-?如何解决,unix,tcl,Unix,Tcl,我有一个TCL脚本,如下所附 代码运行得非常好;我以前测试过几个输入,但是,我有一个输入文件Defect.csv的问题。 我尝试使用unix2dos删除空格、行并转换为unix格式,但是,我遇到了此错误-无法使用空字符串作为“*”的操作数- 我可以看到格式仍然混乱。我认为由于空格的原因,它无法识别“Y”。 我尝试了以下操作以删除空格/选项卡 cat overlappvgsnets.csv | sed's///g' sed's///g'overlappvgsnets.csv 但是,这并不能解决这个
X , Y
5568687 , 260755
5568687 , 259891
5568687 , 259999
5568687 , 260755
脚本:
set x1 [lindex $coords 0]
set y1 [lindex $coords 1]
#The coordinates are to be converted into angstroms
set x2 [expr {int($x1*10)}]
set y2 [expr {int($y1*10)}]
foreach nets [::GetNetsInRegion $x2 $y2 $x2 $y2 vcg temp]
{puts $outfile $nets foreach masterclose
[::cadnavapi::layoutAPI::GetMasterCellName $nets]
{puts $outfile $master}}}} $outfile
如果用于任何表达式的任一操作数为空,Tcl将引发上述错误
% set x1 4
4
% set x2 [expr {int($x1*10)}]
40
% set x1 {}
% set x2 [expr {int($x1*10)}]
can't use empty string as operand of "*"
%
在代码中,您将获得变量x1
,y1
,如下所示
set x1 [lindex $coords 0]
set y1 [lindex $coords 1]
添加检查以确保其不为空,例如
if {$x1 eq {} || $y1 eq {}} {
puts "Empty records"
exit 1
}
问题在输入文件中; 我是从一个大数据文件中创建的,使用的是: awk-F'[(),]''开始{OFS=“\t”;打印“X”,“Y”}{print$2,$3}文件 问题是TCL是严格的,这会导致“空间”出现问题,所以我将其改为这个,然后再改为那个
awk-F'[(),]''BEGIN{OFS=“,”print“X”,“Y”}{print$2,$3}'你能看到我的更新和输入吗?我相信我有一些东西在创造空间,这就是为什么y没有被读取。如何删除选项卡/空格等?我尝试了标准的sed和cat过程,但windows传输中出现了一些问题(dos2unix也不这样做)。NoemiComma不是Tcl中的列表分隔符。如果删除所有空格,则每行将有一个元素([位数],[位数])。尽管如此,如果您首先使用逗号拆分,您仍然可以使用它:lassign[split$line.,]x1显示如何填充$coords列表
foreach
希望其body参数的第一个大括号与前一个参数位于同一行(或者至少在分隔它们的换行符前面有一个反斜杠);基本上这是在输入文件中。
if {$x1 eq {} || $y1 eq {}} {
puts "Empty records"
exit 1
}