这是什么意思 - 不能在tcl-上使用空字符串作为“*”的操作数?如何解决

时间:2017-07-16 02:37:23

标签: unix tcl

我有一个TCL脚本,如下所示。

代码完美无缺;我之前测试了几个输入,但是输入文件Defect.csv存在问题。 我尝试删除空格,行并使用unix2dos转换为unix格式但是,我得到此错误 - 不能使用空字符串作为“*”的操作数 -

我可以看到格式仍然搞砸了。我相信由于空间而无法识别“Y”。 我尝试了以下尝试删除空格/制表符 cat OverlapVGSnets.csv | sed's / // g' sed's / // g'OverlapVGSnets.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

2 个答案:

答案 0 :(得分:1)

can't use empty string as operand of "*"

如果用于任何表达式的操作数之一为空,则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 "*"
%

在您的代码中,您将获得变量x1y1,如下所示,

set x1 [lindex $coords 0]
set y1 [lindex $coords 1]

添加支票以确保它不为空,例如

if {$x1 eq {} || $y1 eq {}} {
    puts "Empty records"
    exit 1
}

答案 1 :(得分:0)

问题出在输入文件中; 我是用大数据文件创建的:

awk -F' [(),]' ' BEGIN {OFS =" \吨&#34 ;;打印" X"," Y"} {打印$ 2,$ 3}'文件

问题是TCL是严格的,这将导致"空格"所以,我改变它,这是有效的

awk -F' [(),]' ' BEGIN {OFS ="&#34 ;;打印" X"," Y"} {打印$ 2,$ 3}'