在自定義編寫的函數中訪問不同的數據表大家好你們好,
我有兩個或多個數據表
//First I define my function:
MyFunction = Function({Table},
For each row(Table,
shift some coordinates;
store some values;
do some other things;
)
);
//Then I would like to run the function on some existing data tables
MyFunction(dt1);
MyFunction(dt2);
MyFunciton(dt3);我現在無法讓它工作。 在腳本指南中,我發現使用 Name Expr() 的詳細說明可能會產生一些影響,但到目前為止,它對我來說是難以捉摸的。
謝謝你的幫助
回复:在自定義編寫的函數中訪問不同的數據表你好,
現在我開始工作了,謝謝。 下面是一個簡單的腳本,如果其他人碰巧登陸這裡,它會顯示一個有效的語法:
Tabfunction = Function({Tablevar},
Tablevar = New Table((Char(Tablevar)),
Add Rows(5),
New Column ("X1", Numeric, Set Values({1,2,3,4,5})),
New Column ("Test", Character)
);
Tablevar; //pass back Tablevar
);
CalcInvalidDies = Function({Tablevar},
For Each Row(Tablevar,
If(:X1>2,:Test="fail",:Test="pass")
)
);
dtinitial = Tabfunction("initial"); //use pointer
dt2 = Tabfunction ("dt2");
CalcInvalidDies(dtinitial);
CalcInvalidDies(dt2);
回复:在自定義編寫的函數中訪問不同的數據表您還需要將 Table 變量添加為函數中的最後一個引用,以便它作為對錶的引用傳回。
abfunction = Function( {Table},
Xlist = {};
Ylist = {};
NumDieX = 10;
NumDieY = 10;
x_mm = 10;
y_mm = 20;
SLW = 0.1;
//Define X-List
For( jj = 0, jj <= NumDieY + 2, jj++,
For( ii = 0, ii <= NumDieX + 2, ii++,
Insert Into( Xlist, ii )
)
);
//Define Y-List
For( kk = 0, kk <= NumDieY + 2, kk++,
For( mm = 0, mm <= NumDieX + 2, mm++,
Insert Into( Ylist, kk );
)
);
Table = New Table( Char( Table ),
Add Rows( (NumDieX + 2) * (NumDieY + 2) ),
New Column( "DieX", Set Values( Xlist ) ),
New Column( "DieY", Set Values( Ylist ) ),
New Column( "DieCorXBL" ),
New Column( "DieCorYBL" ),
New Column( "DieCorXTL" ),
New Column( "DieCorYTL" ),
New Column( "DieCorXTR" ),
New Column( "DieCorYTR" ),
New Column( "DieCorXBR" ),
New Column( "DieCorYBR" )
);
For Each Row(
Table,
:DieCorXBL = :DieX * (SLW + x_mm);
:DieCorYBL = :DieY * (SLW + y_mm);
:DieCorXTL = :DieX * (SLW + x_mm);
:DieCorYTL = :DieY * (SLW + y_mm) + y_mm;
:DieCorXTR = :DieX * (SLW + x_mm) + x_mm;
:DieCorYTR = :DieY * (SLW + y_mm) + y_mm;
:DieCorXBR = :DieX * (SLW + x_mm) + x_mm;
:DieCorYBR = :DieY * (SLW + y_mm);
);
Table << New Column( "Invalid Die", numeric, Set each value( 0 ) );
Table;
);回复:在自定義編寫的函數中訪問不同的數據表你好,
這有效。 仍然不完全,因為我在單獨的文件中有 Tabfunction 並使用 Include("that separate file.jsl")。 但是在那個單獨的文件的更下方是一些產生某些東西的錯誤。 如果我 /*comment*/ 去掉第一部分下面的所有內容,它就會起作用。 我很肯定我會找出問題所在。 謝謝!
</CODE></P><P><CODE class=" language-jsl">
</CODE></P><P> </P></LINGO-BODY><LINGO-SUB id="lingo-sub-257065" slang="en-US">回复:在自定義編寫的函數中訪問不同的數據表</LINGO-SUB><LINGO-BODY id="lingo-body-257065" slang="en-US"><P>您的代碼的問題是當您調用函數時 dtinitial 和 dtoptimizer 沒有指向任何東西。因此,您收到一條錯誤消息。一些建議:</P>
<P> </P>
<UL>
<LI>不要使用變量表。太接近保留字。也許是 tbl 或 tbl_name?</LI>
<LI>因為你的函數創建了一個表,我會讓它把表名作為參數並返回表指針。</LI>
</UL>
<PRE><CODE class=" language-jsl">dtinitial = Tabfunction("Initial");
dtoptimizer = Tabfunction("Optimizer");
回复:在自定義編寫的函數中訪問不同的數據表順便說一句,這有效:
然後,在初始表中,無效模具將被計算在適當的列中。
只有與New Table()結合使用時才會出現問題。
CalcInvalidDies = Function({Table},
For Each Row(Table,
If(SQRT((:DieCorXBL-100)^2+(:DieCorYBL-100)^2)>(WaferSize/2-EE), :Invalid Die = :Invalid Die +1);
If(SQRT((:DieCorXTL-100)^2+(:DieCorYTL-100)^2)>(WaferSize/2-EE), :Invalid Die = :Invalid Die +1);
If(SQRT((:DieCorXTR-100)^2+(:DieCorYTR-100)^2)>(WaferSize/2-EE), :Invalid Die = :Invalid Die +1);
If(SQRT((:DieCorXBR-100)^2+(:DieCorYBR-100)^2)>(WaferSize/2-EE), :Invalid Die = :Invalid Die +1);
If(:DieCorYBL<FLATEE></FLATEE>回复:在自定義編寫的函數中訪問不同的數據表
你好,我們又見面了,
問題在一夜之間返回,而沒有更改代碼。 事實上,這種情況經常發生,因為一些變量似乎以某種方式存儲,並且在重新啟動軟件後它們被刪除。 下面是我想使用的代碼。
我想使用自定義函數 Tabfunction 創建給定數量的表,如下所示,稱為 dtinitial、dtoptimizer 等。
當我在代碼下方運行時,錯誤消息顯示
“名稱未解析:dtinitial 正在訪問或評估 'dtinitial',dtinitial/*###*/”
並指向倒數第二行。
看來我使用的函數參數錯誤,是嗎?
謝謝
Tabfunction = Function({Table},
Xlist={};
Ylist={};
NumDieX=10;
NumDieY=10;<BR /> x_mm=10;
y_mm=20;<BR /> SLW = 0.1;<BR />
//Define X-List
For (jj=0, jj <= NumDieY+2, jj++,
For (ii=0, ii <= NumDieX+2, ii++,
InsertInto(Xlist,ii)
);
);
//Define Y-List
For (kk=0, kk <= NumDieY+2, kk++,
For (mm=0, mm <= NumDieX+2, mm++,
InsertInto(Ylist,kk)
);
);
Table = New Table (Char(Table),
Add Rows((NumDieX+2)*(NumDieY+2)),
New Column ("DieX", Set Values (Xlist)),
New Column ("DieY", Set Values (Ylist)),
New Column ("DieCorXBL"), New Column ("DieCorYBL"),
New Column ("DieCorXTL"), New Column ("DieCorYTL"),
New Column ("DieCorXTR"), New Column ("DieCorYTR"),
New Column ("DieCorXBR"), New Column ("DieCorYBR")
);
For each row (Table,
:DieCorXBL=:DieX*(SLW+x_mm);
:DieCorYBL=:DieY*(SLW+y_mm);
:DieCorXTL=:DieX*(SLW+x_mm);
:DieCorYTL=:DieY*(SLW+y_mm)+y_mm;
:DieCorXTR=:DieX*(SLW+x_mm)+x_mm;
:DieCorYTR=:DieY*(SLW+y_mm)+y_mm;
:DieCorXBR=:DieX*(SLW+x_mm)+x_mm;
:DieCorYBR=:DieY*(SLW+y_mm);
);
Table << New Column ("Invalid Die", numeric, Set each value (0));
);
Tabfunction(dtinitial);
Tabfunction(dtoptimizer);
回复:在自定義編寫的函數中訪問不同的數據表嗨,吉姆,
我明白你的意思了。 我當時的印像是我的語法從根本上是錯誤的,所以我不需要分享太多細節,但事實並非如此。 它的工作原理與上述完全相同。
我花了三個小時試圖解決這個問題,然後我寫了這個問題。 然後我花了兩個時間來實現一個解決方法,然後我嘗試將代碼構建回初始狀態以為您重現錯誤消息,現在一切正常。 所以謝謝,我猜:)
回复:在自定義編寫的函數中訪問不同的數據表嘗試調試具有神秘形式的代碼是非常困難的。您是否在日誌中收到任何錯誤消息?
For Each Row() 一次只能在您的腳本中運行一個實例。我傾向於在函數中避免它。我通常還會查看完整的專欄參考
Table:a[15] = 43;
// or
column( Table, "a" )[15] = 43;
以避免函數指向錯誤的表。