在自定义编写的函数中访问不同的数据表大家好你们好,
我有两个或多个数据表
//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;
以避免函数指向错误的表。