Crea un array associativo da righe selezionate univoche e numero di rigaCiao a tutti,
Ho una tabella in cui ho selezionato le righe in cui l'oggetto è scienza o matematica (usando la funzione select where). Ora voglio creare un array associativo che memorizzi il numero di riga di tutti i selezionati con voci univoche di una particolare colonna.
Dopodiché voglio avviare un ciclo per tutte le chiavi dell'array associativo. Che sottoinsiemerà le righe da key[i] a Key[i+1] per ogni valore.
Per esempio:
| Numero_riga | Alunno | Sequenza | Soggetto |
| 1 | UN | 1 | Economia |
| 2 | UN | 2 | Scienza |
| 3 | UN | 4 | Fisica |
| 4 | UN | 5 | Matematica |
| 5 | UN | 2 | Scienza |
| 6 | UN | 4 | Chimica |
| 7 | UN | 6 | Scienza |
| 8 | UN | 2 | Matematica |
| 9 | UN | 1 | Sociale |
* Righe in colore blu, ho selezionato utilizzando la funzione Seleziona dove.
- Voglio creare variabili che memorizzano Associative Array: ["Science" => {2,5,7}], "Math" => {4,8}].
- Quindi voglio creare un ciclo per entrambe le chiavi che sottoinsiemeranno e genereranno 3 tabelle.
- Tabella 1: dalla riga numero 2 alla 5
- Tabella 2: dalla riga numero 5 alla 7
- Tabella 3 : Dalla riga numero 4 alla 8
Per favore aiutatemi, come posso risolvere.
Grazie 
Ri: creare un array associativo da righe selezionate univoche e numero di rigaPer ottenere le tabelle dei sottoinsiemi che credo tu voglia, modifica l'ultima parte del codice di Ian in modo che appaia come sotto. Nello specifico, nidifica il (nuovo) ciclo for con indicizzazione j all'interno del ciclo for con indicizzazione i di Ian.
Saluti,
Brady
// Build associative arrays from current key list
subject_aa = associative array();
for (i = 1, i <= nitems(key_list), i++,
found_rows = dt << get rows where(as column(dt, "Subject") == key_list[i]);
subject_aa[key_list[i]] = found_rows;
for(j = 1, j<=nitems(found_rows)-1, j++,
dt << subset(rows(found_Rows[j] :: found_Rows[j+1]));
)
);
show(subject_aa);
Ri: creare un array associativo da righe selezionate univoche e numero di riga@pmroz ha svolto la maggior parte del lavoro, che si può aggiungere a:
NamesDefaultToHere(1);
dt = New Table( "Subjects",
Add Rows( 9 ),
New Column( "Student",
Character( 16 ),
"Nominal",
Set Values( {"A", "A", "A", "A", "A", "A", "A", "A", "A"} )
),
New Column( "Sequence",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [1, 2, 4, 5, 2, 4, 6, 2, 1] )
),
New Column( "Subject",
Character( 16 ),
"Nominal",
Set Values(
{"Economics", "Science", "Physics", "Math", "Science", "Chemistry", "Science", "Math", "Social"}
)
)
);
// Make any row selection (in this case, the 'blue' rows)
dt << selectRows({2, 4, 5, 7, 8 });
// Get key list from the current row selection
subjectVals = Column(dt, "Subject")[dt << getSelectedRows];
key_list = AssociativeArray(subjectVals) << getKeys;
// Build associative arrays from current key list
subject_aa = associative array();
for (i = 1, i <= nitems(key_list), i++,
found_rows = dt << get rows where(as column(dt, "Subject") == key_list[i]);
subject_aa[key_list[i]] = found_rows;
);
show(subject_aa);
Fare clic destro sulle parole chiave JSL nell'editor e fare 'Help Scripting Index' per ottenere maggiori informazioni.
Usando il tuo esempio, una volta che hai gli array associativi, la specifica delle tre tabelle che dici di volere non mi era chiara.
Ri: creare un array associativo da righe selezionate univoche e numero di riga@pmroz Grazie per la risposta.
Il mio set di dati è molto grande e l'utilizzo di questo approccio potrebbe richiedere più tempo.
Inoltre, il mio key_list non è fisso, dipende in base alla condizione se contiene o meno un testo particolare.Ri: creare un array associativo da righe selezionate univoche e numero di rigaQuesto codice dovrebbe farti iniziare.
dt = New Table( "Subjects", Add Rows( 9 ),
New Column( "Student", Character( 16 ), "Nominal",
Set Values( {"A", "A", "A", "A", "A", "A", "A", "A", "A"} ) ),
New Column( "Sequence", Numeric, "Continuous", Format( "Best", 12 ),
Set Values( [1, 2, 4, 5, 2, 4, 6, 2, 1] ) ),
New Column( "Subject", Character( 16 ), "Nominal",
Set Values( {"Economics", "Science", "Physics", "Math", "Science", "Chemistry",
"Science", "Math", "Social"} ) )
);
key_list = {"Science", "Math"};
subject_aa = associative array();
for (i = 1, i <= nitems(key_list), i++,
found_rows = dt << get rows where(as column(dt, "Subject") == key_list[i]);
subject_aa[key_list[i]] = found_rows;
);
show(subject_aa);