Accesso a diverse tabelle di dati in una funzione scritta personalizzataCiao a tutti,
Ho due o più tabelle di dati
//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);Non riesco a farlo funzionare al momento. Nella Guida allo scripting trovo un'elaborazione che utilizza Name Expr () che può avere un certo impatto, ma finora è sfuggente per me.
Grazie per l'aiuto
Ri: Accesso a diverse tabelle di dati in una funzione scritta personalizzataÈ piuttosto difficile tentare di eseguire il debug del codice con la forma criptica in cui si trova. Ricevi messaggi di errore nel registro?
Per ogni riga () può avere solo un'istanza in esecuzione nello script, alla volta. Ho la tendenza ad evitarlo nelle funzioni. In genere vado anche a un riferimento di colonna completo di
Table:a[15] = 43;
// or
column( Table, "a" )[15] = 43;
per evitare che la funzione punti alla tabella sbagliata.
Ri: Accesso a diverse tabelle di dati in una funzione scritta personalizzataCiao Jim,
Vedo il tuo punto. Stavo lavorando con l'impressione che la mia sintassi fosse fondamentalmente sbagliata, quindi non avevo bisogno di condividere troppi dettagli, ma sembra non esserlo. Funziona esattamente come descritto sopra.
Ho trascorso tre ore a cercare di risolvere il problema, quindi ho scritto questa domanda. Poi ho impiegato due nostri a implementare un lavoro in giro, quindi ho cercato di riportare il codice allo stato iniziale per riprodurre un messaggio di errore per te, e ora tutto funziona bene. Quindi grazie, immagino:)
Ri: Accesso a diverse tabelle di dati in una funzione scritta personalizzata
Ciao di nuovo,
il problema è tornato durante la notte senza modificare il codice. In effetti ciò accade abbastanza spesso perché alcune variabili sembrano essere memorizzate in qualche modo e dopo aver riavviato il software vengono eliminate. Di seguito è riportato il codice che vorrei utilizzare.
Usando la funzione personalizzata Tabfunction, vorrei creare un determinato numero di tabelle come mostrato di seguito chiamato dtinitial, dtoptimizer e così via.
Quando corro sotto il codice, viene visualizzato il messaggio di errore
"Nome irrisolto: dtinitial nell'accesso o nella valutazione di" dtinitial ", dtinitial / * ### * /"
e punta all'ultima riga.
Sembra che sto usando gli argomenti della funzione sbagliati, vero?
Grazie
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);
Ri: Accesso a diverse tabelle di dati in una funzione scritta personalizzataA proposito, questo funziona:
Quindi, nella tabella iniziale, gli stampi non validi verranno calcolati nella colonna appropriata.
Solo in combinazione con Nuova tabella () sembra esserci un problema.
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>Ri: Accesso a diverse tabelle di dati in una funzione scritta personalizzataIl problema con il tuo codice è che dtinitial e dtoptimizer non indicano nulla quando chiami la tua funzione. Quindi stai ricevendo un messaggio di errore. Alcuni suggerimenti:
- Non utilizzare la tabella delle variabili. Troppo vicino a una parola riservata. Forse tbl o tbl_name?
- Poiché la tua funzione crea una tabella, vorrei che prendesse il nome della tabella come argomento e restituisse il puntatore della tabella.
dtinitial = Tabfunction("Initial");
dtoptimizer = Tabfunction("Optimizer");
Ri: Accesso a diverse tabelle di dati in una funzione scritta personalizzataCiao,
questo funziona. Ancora non del tutto, perché ho la funzione Tab su un file separato e uso Includi ("quel file.jsl separato"). Ma più in basso in quel file separato c'è qualche bug che crea qualcosa. Se io / * commento * / via tutto sotto la prima parte, funziona. Sono sicuro che scoprirò qual è il problema. Grazie!
</CODE></P><P><CODE class=" language-jsl">
</CODE></P><P> </P></LINGO-BODY><LINGO-SUB id="lingo-sub-257097" slang="en-US">Ri: Accesso a diverse tabelle di dati in una funzione scritta personalizzata</LINGO-SUB><LINGO-BODY id="lingo-body-257097" slang="en-US"><P>È inoltre necessario aggiungere la variabile Table come ultimo riferimento nella funzione, in modo che venga restituita come riferimento alla tabella.</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;
);
Ri: Accesso a diverse tabelle di dati in una funzione scritta personalizzataCiao,
ora l'ho fatto funzionare, grazie. Di seguito è riportato un semplice script che mostra una sintassi funzionante se qualcun altro arriva a destinazione qui:
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);