Accéder à différentes tables de données dans une fonction écrite personnaliséeSalut tout le monde,
J'ai deux tables de données ou plus
//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);Je n'arrive pas à le faire fonctionner pour le moment. Dans le guide de script, je trouve une élaboration utilisant Name Expr() qui peut avoir un certain impact, mais jusqu'à présent, elle m'échappe.
Merci pour ton aide
Re : Accéder à différentes tables de données dans une fonction écrite personnaliséeSalut,
maintenant je l'ai fait fonctionner, merci. Vous trouverez ci-dessous un script simple qui montre une syntaxe fonctionnelle si quelqu'un d'autre arrive ici :
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);
Re : Accéder à différentes tables de données dans une fonction écrite personnaliséeVous devez également ajouter votre variable Table en tant que dernière référence dans votre fonction, afin qu'elle soit renvoyée en tant que référence à la 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;
);Re : Accéder à différentes tables de données dans une fonction écrite personnaliséeSalut,
cela marche. Toujours pas entièrement, car j'ai la fonction Tab dans un fichier séparé et j'utilise Include("ce fichier séparé.jsl"). Mais plus bas dans ce fichier séparé se trouve un bogue qui crée quelque chose. Si je /*commente*/ supprime tout ce qui se trouve en dessous de la première partie, cela fonctionne. Je suis sûr que je vais trouver quel est le problème. Merci!
</CODE></P><P><CODE class=" language-jsl">
</CODE></P><P> </P></LINGO-BODY><LINGO-SUB id="lingo-sub-257065" slang="en-US">Re : Accéder à différentes tables de données dans une fonction écrite personnalisée</LINGO-SUB><LINGO-BODY id="lingo-body-257065" slang="en-US"><P>Le problème avec votre code est que dtinitial et dtoptimizer ne pointent vers rien lorsque vous appelez votre fonction.Par conséquent, vous obtenez un message d'erreur.Quelques suggestions:</P>
<P> </P>
<UL>
<LI>N'utilisez pas la variable Table.Trop proche d'un mot réservé.Peut-être tbl ou tbl_name ?</LI>
<LI>Étant donné que votre fonction crée une table, je lui demanderais de prendre le nom de la table comme argument et de renvoyer le pointeur de table.</LI>
</UL>
<PRE><CODE class=" language-jsl">dtinitial = Tabfunction("Initial");
dtoptimizer = Tabfunction("Optimizer");
Re : Accéder à différentes tables de données dans une fonction écrite personnaliséeAu passage, cela fonctionne :
Ensuite, dans le tableau initial, les matrices invalides seront calculées dans la colonne appropriée.
Ce n'est qu'en combinaison avec New Table () qu'il semble y avoir des problèmes.
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 : Accéder à différentes tables de données dans une fonction écrite personnalisée
Re-bonjour,
le problème est revenu du jour au lendemain sans changer le code. En fait, cela se produit assez souvent car certaines variables semblent être stockées d'une manière ou d'une autre et après le redémarrage du logiciel, elles sont supprimées. Ci-dessous le code que je souhaite utiliser.
À l'aide de la fonction personnalisée Tabfunction, je souhaite créer un nombre donné de tables, comme indiqué ci-dessous, appelées dtinitial, dtoptimizer, etc.
Lorsque je lance le code ci-dessous, le message d'erreur indique
"Nom non résolu : dtinitial dans l'accès ou l'évaluation de 'dtinitial', dtinitial/*###*/"
et pointez sur l'avant-dernière ligne.
Il semble que j'utilise mal les arguments de la fonction, n'est-ce pas ?
Merci
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 : Accéder à différentes tables de données dans une fonction écrite personnaliséeSalut Jim,
Je vois ce que tu veux dire. Je travaillais sous l'impression que ma syntaxe est fondamentalement erronée, je n'avais donc pas besoin de partager trop de détails, mais il semble que ce ne soit pas le cas. Cela fonctionne exactement comme décrit ci-dessus.
J'ai passé trois heures à essayer de résoudre le problème, puis j'ai écrit cette question. Ensuite, j'ai passé deux nôtres à implémenter un contournement, puis j'ai essayé de reconstruire le code à l'état initial pour vous reproduire un message d'erreur, et maintenant tout fonctionne bien. Alors merci, je suppose 
Re : Accéder à différentes tables de données dans une fonction écrite personnaliséeIl est assez difficile d'essayer de déboguer votre code avec la forme cryptée dans laquelle il se trouve.Recevez-vous des messages d'erreur dans le journal ?
For Each Row() ne peut avoir qu'une seule instance en cours d'exécution dans votre script, à la fois.J'ai tendance à l'éviter dans les fonctions.Je vais aussi généralement à une référence de colonne complète de
Table:a[15] = 43;
// or
column( Table, "a" )[15] = 43;
pour éviter que la fonction pointe vers la mauvaise table.