Acceder a diferentes tablas de datos en una función escrita personalizadaHola a todos,
Tengo dos o más tablas de datos.
//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);No puedo hacer que funcione en este momento. En la Guía de secuencias de comandos, encuentro una elaboración con Name Expr () que puede tener algún impacto, pero hasta ahora me es difícil.
Gracias por tu ayuda
Re: Acceso a diferentes tablas de datos en una función escrita personalizadaEs bastante difícil intentar depurar su código con la forma críptica en la que se encuentra. ¿Recibe algún mensaje de error en el registro?
For Each Row () solo puede tener una instancia ejecutándose en su script, a la vez. Tengo una tendencia a evitarlo en las funciones. También suelo ir a una referencia de columna completa de
Table:a[15] = 43;
// or
column( Table, "a" )[15] = 43;
para evitar que la función apunte a la tabla incorrecta.
Re: Acceso a diferentes tablas de datos en una función escrita personalizadaHola Jim,
Entiendo tu argumento. Estaba trabajando bajo la impresión de que mi sintaxis es fundamentalmente incorrecta, por lo que no necesitaba compartir demasiados detalles, pero parece que no lo es. Funciona exactamente como se describe anteriormente.
Pasé tres horas tratando de solucionar el problema, luego escribí esta pregunta. Luego pasé dos implementando un trabajo alternativo, luego intenté reconstruir el código al estado inicial para reproducir un mensaje de error para usted, y ahora todo funciona bien. Así que gracias, supongo:)
Re: Acceso a diferentes tablas de datos en una función escrita personalizada
Hola de nuevo,
El problema regresó durante la noche sin cambiar el código. De hecho, eso sucede con bastante frecuencia porque algunas variables parecen estar almacenadas de alguna manera y después de reiniciar el software se eliminan. A continuación se muestra el código que me gustaría usar.
Usando la función personalizada Tabfunction Me gustaría crear un número dado de tablas como se muestra a continuación llamado dtinitial, dtoptimizer, y así sucesivamente.
Cuando ejecuto el siguiente código, el mensaje de error dice
"Nombre sin resolver: dtinitial en el acceso o evaluación de 'dtinitial', dtinitial / * ### * /"
y señale la segunda última fila.
Parece que estoy usando mal los argumentos de la función, ¿verdad?
Gracias
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);
Re: Acceso a diferentes tablas de datos en una función escrita personalizadaPor cierto, esto funciona:
Luego, en la tabla inicial, los dados no válidos se calcularán en la columna correspondiente.
Solo en combinación con New Table () parece haber problemas.
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>Re: Acceso a diferentes tablas de datos en una función escrita personalizadaEl problema con su código es que dtinitial y dtoptimizer no apuntan a nada cuando llama a su función. Por lo tanto, recibe un mensaje de error. Algunas sugerencias:
- No use la tabla variable. Demasiado cerca de una palabra reservada. ¿Quizás tbl o tbl_name?
- Como su función crea una tabla, quisiera que tome el nombre de la tabla como argumento y devuelva el puntero de la tabla.
dtinitial = Tabfunction("Initial");
dtoptimizer = Tabfunction("Optimizer");
Re: Acceso a diferentes tablas de datos en una función escrita personalizadaHola,
esto funciona. Todavía no del todo, porque tengo la función Tab en un archivo separado y uso Incluir ("ese archivo separado.jsl"). Pero más abajo en ese archivo separado hay un error que hace algo. Si yo / * comento * / ausente todo lo que está debajo de la primera parte, funciona. Estoy seguro de que descubriré cuál es el problema. ¡Gracias!
</CODE></P><P><CODE class=" language-jsl">
</CODE></P><P> </P></LINGO-BODY><LINGO-SUB id="lingo-sub-257097" slang="en-US">Re: Acceso a diferentes tablas de datos en una función escrita personalizada</LINGO-SUB><LINGO-BODY id="lingo-body-257097" slang="en-US"><P>También debe agregar su variable de tabla como la última referencia en su función, de modo que se devuelva como referencia a la tabla.</P>
<PRE><CODE class=" language-jsl">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;
);
Re: Acceso a diferentes tablas de datos en una función escrita personalizadaHola,
ahora lo tengo para trabajar, gracias. A continuación se muestra un script simple que muestra una sintaxis funcional si alguien más aterriza aquí:
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);