tabella dati: la colonna del messaggio esiste (nome colonna)? (:green_heart:)☐ nuova fantastica funzionalità
☑ potrebbe aiutare molti utenti!
☑ rimuove un "bug"
☐ bello da avere
☐ nessuno ne ha bisogno
C'è una colonna nomecolonna nella mia tabella dati?
Questa è una delle domande che più spesso vengono poste nella comunità:
https://community.jmp.com/t5/Discussions/Check-column-name-if-existing/mp/312011/highlight/true#M56...
https://community.jmp.com/t5/Discussions/How-to-check-if-list-of-columns-exist-and-report-those-that...
https://community.jmp.com/t5/Discussions/If-column-exists/td-p/348
https://community.jmp.com/t5/Discussions/how-to-creat-new-column-if-same-name-column-does-not-exist/...
https://community.jmp.com/t5/Discussions/Create-a-new-Row-column-only-if-it-does-not-exist/td-p/3091...
https://community.jmp.com/t5/Discussions/Determining-if-a-column-exists/mp/6268#M6267
https://community.jmp.com/t5/Discussions/Validate-column-name-exists-before-graphing/mp/5088#M5087
Sembra quindi che al momento l'implementazione non sia abbastanza semplice.
Ma è ancora più interessante e nasconde molti pericoli.
Un utente che non conosce gli ostacoli associati alle convenzioni di denominazione JSL, molto probabilmente scrive solo
Contains( dt << Get Column Names(String), "age" )
nel suo codice. Abbastanza facile...
ma estremamente pericoloso - vedi:
https://community.jmp.com/t5/Discussions/check-if-column-exists/mp/572468
Quelle che sembrano strane discussioni di alcuni nerd dello scripting JSL dimostrano che l'affermazione di cui sopra, certo, funzionerà in molti casi, ma:
fallirà se nei nomi delle colonne sono presenti spazi, lettere maiuscole e caratteri speciali.
Per impedire agli utenti di utilizzare un codice così pericoloso, è meglio "istituzionalizzarlo"
- ovvero fornire agli utenti una soluzione semplice che tenga automaticamente conto di tutte le insidie.
Il mio desiderio:
dovrebbe essere possibile chiedere a una tabella dati:
dt << contains column("colname")
Questa funzione può tenere conto di tutte le insidie:
- compare with exact match - or check match for as name("colname")<FONT face="arial,helvetica,sans-serif">, tenendo conto degli spazi</FONT>
- distinguere o non distinguere le lettere minuscole/maiuscole
- gestire caratteri speciali
Il vantaggio:
- meno domande nella comunità
- codice automaticamente migliore.
- meno frustrazione.
altri desideri inviati da 
Automazione e scriptingRi: tabella dati: la colonna del messaggio esiste (colname)?Grazie 
Ri: tabella dati: la colonna del messaggio esiste (colname)? - Lo stato è cambiato in: Sì, resta sintonizzato!Development is exploring a solution: "avere un messaggio sul tavolo da chiedere direttamente, tipodt << Has Column("age"), potenzialmente con un'opzione per fornire risposte diverse se desideri corrispondenze esatte o corrispondenze Nome (senza distinzione tra maiuscole e minuscole)".
Passaggio a Sì, resta sintonizzato.
Ri: tabella dati << colonna esiste ("nome")? - Lo stato è cambiato in: IndagandoRi: tabella dati << colonna esiste ("nome")?Grazie @hogi e @jthi per il commento. Modifica dello stato in investigazione.
Ri: tabella dati << colonna esiste ("nome")? - Lo stato è cambiato in: RiconosciutoCiao @hogi , grazie per il tuo suggerimento! Abbiamo acquisito la tua richiesta e la prenderemo in considerazione.
Ri: tabella dati << colonna esiste ("nome")?Potrebbe essere meglio far capire a JMP che si tratta di nomi di colonne uguali o diversi? Questo ovviamente potrebbe rompere le cose, quindi potrebbe non essere così facile da implementare.
C'è qualcosa di un po' confuso qui:
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dt:age << set name("a g e");
dt:age[1] = 999;
Show(Column(dt, "age")); //Column(dt, "age") = Column("a g e");
Show(dt:age[1]); //dt:age[1] = 999;
dt << New Column("age", Numeric, Ordinal);
Show(Column Name(2) == Column Name(6)); // Column Name(2) == Column Name(6) = 1; // Columns don't need unique names?
Show(Column(dt, "age")); //Column(dt, "age") = Column("age");
dt:age[1] = 9999;
Show(dt:age[1]); //dt:age[1] = 9999;
wait(1);
dt << Delete Column("age");
Show(Column(dt, "age")); //Column(dt, "age") = Column("a g e");
Show(dt:age[1]); //dt:age[1] = 999;
Le colonne seguono una denominazione specifica? È necessario che i nomi successivi inizino con caratteri alfabetici o un carattere di sottolineatura , ma gli spazi bianchi contano (a volte) per le colonne. Forse il problema (se ce n'è uno) è proprio come funziona il riferimento alle colonne?