2017-07-16 41 views
0

我有一個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 
+0

逗號不是Tcl中的列表分隔符。如果你只是刪除所有的空格,每行將有一個單一的元素([數字],[數字])。但是,如果先分割逗號,則可以使用它:lassign [split $ line。,] x1 y1 –

+0

顯示如何填充$ coords列表。 –

+0

我不認爲這正是你的代碼; 'foreach'需要它的主體參數的第一個大括號與前一個參數在同一行(或至少是一個反斜線在分隔它們的單元之前)。 –

回答

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 
} 
+0

你能看到我的更新和輸入嗎?我相信我有東西在製造空間,這就是爲什麼y沒有被閱讀。我如何刪除標籤/空格等?我嘗試了stardard sed和cat程序,但是,從windows傳輸中弄到了一些東西(dos2unix也沒有這樣做)。諾埃米 – user5987994

0

問題在輸入文件中; 我從一個大數據文件創建這個使用這個:

awk -F'[(),]''BEGIN {OFS =「\ t」;打印「X」,「Y」} {打印$ 2,$ 3}」文件

的問題是,TCL的內部控制嚴格,這將與‘空間’故障所以,我改變,要這樣那樣的作品

awk -F'[(),]''BEGIN {OFS =「,」;打印「X」,「Y」} {print $ 2,$ 3}'

相關問題