<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ciao,
Ho una colonna ("BIN") con un gruppo di valori di caratteri diversi e ogni riga nel set di dati si riferisce a un'unità unica che è stata testata. Senza dover trasformare / riepilogare il set di dati, vorrei creare una formula di colonna che richieda all'utente una finestra di dialogo ListBox con un insieme di tutti i valori univoci all'interno della colonna "BIN". Dopo aver selezionato i valori desiderati nel ListBox, le unità che hanno un valore all'interno della colonna "BIN" avranno il valore di 1 set per la colonna generata ("BIN_DISPOSITION"), e le colonne quelle unità che non hanno un "BIN" "il valore che corrisponde alla selezione ListBox avrà il valore 0 impostato sulla colonna generata (" BIN_DISPOSITION ").
Esempio:
Nel caso in cui l'utente esegua la colonna formula e selezioni "BIN2" e "BIN3", è necessario il seguente output.
Unità#
| BIDONE | BIN_DISPOSITION (generato dalla formula della colonna) |
|---|
Unità 1 | BIN1 | 0 |
| Unità 2 | BIN2 | 1 |
| Unità 3 | BIN2 | 1 |
| Unità 4 | BIN1 | 0 |
| Unità 5 | Bin3 | 1 |
script:
bin_values_all = {} ;
bin_values_all_sorted = {} ;
bin_values_selected = {} ;
Se ( Riga () == 1 ,
Per ogni riga ( Se ( ! contiene ( bin_values_all , : BIDONE [ Riga ()]) ,
Inserire ( bin_values_all , : BIDONE [ Riga ()])
) ;
bin_values_all_sorted = Ordine crescente ( bin_values_all ) ;
Nuova finestra ( "Selezione valore BIN" , Modale,
Scatola di contorno ( "Selezione valore BIN" ,
libbre = Casella di riepilogo (
bin_values_all_sorted
) ,
Scatola dei pulsanti ( "OK" ,
bin_values_selected = libbre << GetSelected
) ;
Se ( contiene ( bin_values_selected , : BIDONE ) ,
1 ,
0
) ;
Ho dovuto aggiungere il condizionale If (Row () == 1 ...) in modo che la generazione di finestre e di elenchi non venisse eseguita più di una volta, ma sembra che le mie dichiarazioni di variabili sopra questo siano reinizializzate ogni volta, che non è quello che voglio
Non ero sicuro se esistesse un modo integrato per farlo o meno.
Mi chiedo se qualcuno ha qualche idea.
Grazie,
JP
Ho capito come farlo funzionare.
Invece di inizializzare gli elenchi prima della prima istruzione condizionale, li ho inseriti nel caso Row () == 1 e li ho convertiti in variabili globali usando il prefisso '::'.
Se ( Riga () == 1 ,
:: bin_values_all = {} ;
:: bin_values_all_sorted = {} ;
:: bin_values_selected = {} ;
Per ogni riga ( Se ( ! contiene ( bin_values_all , : BIDONE [ Riga ()]) ,
Inserire ( bin_values_all , : BIDONE [ Riga ()])
) ;
bin_values_all_sorted = Ordine crescente ( bin_values_all ) ;
Nuova finestra ( "Selezione valore BIN" , Modale,
Scatola di contorno ( "Selezione valore BIN" ,
libbre = Casella di riepilogo (
bin_values_all_sorted
) ,
Scatola dei pulsanti ( "OK" ,
bin_values_selected = libbre << GetSelected
) ;
Se ( contiene ( bin_values_selected , : BIDONE ) ,
1 ,
0
) ;