Confronto di righe e colonne con caratteri specialiQuesto potrebbe essere molto semplice, ma sono nuovo in JMP e trovo difficile trovare una soluzione a questo errore.
"%" imprevisto. Forse manca un "," o ")".
L'accesso alla tabella dati con ambito richiede una colonna o una variabile della tabella dati nell'accesso o nella valutazione di dt1: Acidic Variant' , dt1:Acidic Variant /*####*/
Sto semplicemente confrontando una riga in una tabella con le colonne dell'altra tabella. Funziona per i nomi di righe e colonne che non hanno caratteri speciali come % o () ma avrò nomi che avranno caratteri speciali. Qualcuno può indicarmi come si può gestire la cosa? Qualsiasi aiuto molto apprezzato. Grazie
Re: Confrontare righe e colonne con caratteri specialiHo pensato che il mio ciclo non fosse corretto perché non prendeva l'ultimo valore. Ci scusiamo per l'aggiornamento in ritardo.
Re: Confrontare righe e colonne con caratteri speciali@txnelson Mi sono reso conto che solo non prende i limiti delle specifiche dall'ultima riga di example2. Non so ancora perché, ma aggiornerò se lo scopro.
Grazie.
Re: Confrontare righe e colonne con caratteri speciali@txnelson grazie per aver risposto così prontamente.
Re: Confrontare righe e colonne con caratteri specialiQuindi sospetto che ci sia una differenza nel nome della colonna e nel nome nella tabella dei dati dei limiti
Re: Confrontare righe e colonne con caratteri speciali@txnelson , ma quando eseguo lo script sulla tabella modificata, i limiti delle specifiche non vengono inseriti nella colonna "Varianti acide".Re: Confrontare righe e colonne con caratteri specialiLo script legge la tabella dei limiti, riga per riga.Quindi ottiene il nome della colonna da qualunque riga si trovi attualmente e applica i limiti alla colonna della tabella dati in base al nome della colonna, non al numero della colonna.
Pertanto, l'ordine delle colonne nella tabella dei dati non è importante
Re: Confrontare righe e colonne con caratteri speciali@txnelson , È possibile aggiungere limiti di specifica a una tabella di dati se le righe non sono nello stesso ordine delle colonne? Per esempio,
la tabella Esempio1 sarà la stessa di prima, ma la tabella Esempio2 sarà:

Come posso raggiungere questo obiettivo? Grazie per qualsiasi contributo.
Re: Confrontare righe e colonne con caratteri specialiGrazie mille per la spiegazione.
Re: Confrontare righe e colonne con caratteri specialiIl problema è comune quando si scrive JSL ..... hai caratteri speciali nei nomi delle colonne.Quindi, ad esempio, il nome della tua colonna potrebbe essere
A+B
e quello che stai tentando di fare è impostare una proprietà di colonna .... in questo caso, Spec Limits.Quindi, se il comando viene scritto direttamente, sarà simile a:
:A+B << Set Property( "Spec Limits", { LSL( 22 ), USL( 55 ), show limits( 1 ) } );
A JSL non piacerà, perché lo interpreterà come una colonna denominata "A" a cui stai aggiungendo il valore da un nome variabile "B", e quindi applicando la proprietà Set ad essa.JSL genererebbe semplicemente un errore.
Quindi, la soluzione è usare la funzione :Name().
:Name("A+B") << Set Property( "Spec Limits", { LSL( 22 ), USL( 55 ), show limits( 1 ) } );
Ciò costringerà JSL a interpretare A+B come nome di colonna.Ora, per renderlo ancora più preciso, se aggiungiamo un puntatore a una tabella di dati all'inizio di questo, assicureremo che non solo punti a una colonna specifica, ma puntino a una colonna specifica in una tabella di dati specifica
dt1 = data table("..........");
dt1:Name( "A+B" ) << Set Property( "Spec Limits", { LSL( 22 ), USL( 55 ), show limits( 1 ) } );
Passiamo ora alla tua domanda specifica:
( "dt1:Name(\!"" || Column( dt2, "ColumnName" )[i] || "\!")" )
Ha davvero bisogno di essere guardato in una forma più completa
Parse( "dt1:Name(\!"" || Column( dt2, "ColumnName" )[i] || "\!")" ) )
Dobbiamo sempre esaminare JSL, dall'interno verso l'esterno.Pertanto, diciamo così
i = 2;
e che il valore della seconda riga nella tabella dati dt2 per una variabile denominata ColumnName sia A+B.
Column( dt2, "ColumnName" )[i] = "A+B"
Quindi ora il codice JSL è risolto in
Parse( "dt1:Name(\!"" || "A+B" || "\!")" ) )
L'operazione successiva è semplicemente la contenazione di 3 stringhe in una stringa.
"dt1:Nome(\!""
"A+B"
"\!")"
Potrebbe sembrare che ci siano troppe virgolette doppie nella stringa uno e nella stringa 3. Ma in JSL, \! è un carattere di escape, che indica che il carattere che lo segue deve essere trattato diversamente.\!n viene trattato come un carattere di avanzamento riga e, nel nostro esempio, \!" viene trattato come una doppia virgoletta incorporata.
Quindi, una volta completata la concatenazione, il JSL si presenta come
Parse( "dt1:Name(\!"A+B\!")" ) )
Il passaggio finale è l'azione risultante della funzione Parse().Analizzerà la stringa e la preparerà per l'esecuzione.Nel nostro caso significa semplicemente che rimuoverà le virgolette esterne e risolverà \!" in una semplice doppia virgoletta, lasciandola con
dt1:Name("A+B")
Questa è la forma esatta di ciò che è richiesto come sintassi per fare riferimento a una colonna che contiene caratteri speciali nel nome
dt1:Name( "A+B" ) << Set Property( "Spec Limits", { LSL( 22 ), USL( 55 ), show limits( 1 ) } );
Spero che aiuti
Re: Confrontare righe e colonne con caratteri speciali@txnelson Questo ha funzionato davvero come un fascino. Tuttavia, puoi aiutarmi a capire cosa fa questa parte? Ho provato a utilizzare la funzione del nome ma non sono riuscito a farlo funzionare. Ancora una volta, grazie mille per il tuo aiuto.
<SPAN class="token punctuation">(</SPAN> <SPAN class="token string">"dt1:Name(\!"</SPAN><SPAN class="token string">" || Column( dt2, "</SPAN><SPAN class="token function">ColumnName</SPAN><SPAN class="token string">" )[i] || "</SPAN>\<SPAN class="token operator">!</SPAN><SPAN class="token string">")"</SPAN> <SPAN class="token punctuation">)</SPAN>
Re: Confrontare righe e colonne con caratteri specialiEcco una modifica al tuo script che gli consentirà di funzionare.Stavi seguendo il percorso corretto, dovevi solo usare la funzione :Name() nella funzione Sostituisci
Names Default to Here(1);
dt1 = Data Table( "Example1" );
dt2 = Data Table( "Example2" );
a = N Rows( dt2 );
colNamesList = dt1 << get column names( string );
For( i = 1, i < a, i++,
Eval(
Substitute(
Expr(
If( Try( __col__ << get name, "" ) != "",
__col__ << Set Property(
"Spec Limits",
{LSL( _LSL_ ), USL( _USL_ ), Target( _Target ), Show Limits( 1 )}
)
)
),
Expr( __col__ ), Parse( "dt1:Name(\!"" || Column( dt2, "ColumnName" )[i] || "\!")" ),
Expr( _LSL_ ), dt2:LSL[i],
Expr( _USL_ ), dt2:USL[i],
Expr( _Target ), dt2:Target[i],
)
)
);
Inoltre, ho aggiunto un controllo per assicurarmi che la colonna si trovi nella tabella dei dati di destinazione, in modo che lo script non esca in errore e interrompa l'elaborazione prima che tutti i record vengano elaborati.
Re: Confrontare righe e colonne con caratteri speciali@Aam_jmp ,
Forse questo è un post utile da cui puoi imparare qualcosa https://community.jmp.com/t5/Discussions/Spec-limits-issue/mp/50166.
Sto cercando di capire leggendo il thread qual era la tua vera domanda? Probabilmente sarà d'aiuto se definisci qual è il tuo obiettivo, quindi è più facile rispondere ai thread e sarà vantaggioso per la comunità in generale.
Re: Confronto di righe e colonne con caratteri specialiUday, grazie per l'aiuto. Sto insegnando a me stesso questa parte. Tuttavia, stavo cercando di realizzare l'inserimento di limiti di specifica in una tabella di dati utilizzando un'altra tabella di dati. Posso farlo senza problemi se i nomi delle colonne non hanno caratteri speciali. Tuttavia, non sono in grado di gestire i caratteri speciali nelle mie tabelle di dati. Un approccio che ho provato è stato trovare il (%) nei nomi delle mie colonne e sostituirli con uno spazio. Anche se ha funzionato, non credo che sia la soluzione migliore al mio problema. So che posso usare un componente aggiuntivo per aggiungere limiti alle specifiche, ma sarebbe bello sapere come posso risolvere questo problema con jsl. Grazie per qualsiasi input che potresti fornire su questo. Il mio codice è:
dt1 = Data Table( "Example1" );
dt2 = Data Table( "Example2" );
a = N Rows( dt2 );
For( i = 1, i < a, i++,
Eval(
Substitute(
Expr(
__col__ << Set Property( "Spec Limits", {LSL( _LSL_ ), USL( _USL_ ), Target( _Target ), Show Limits( 1 )} );
),
Expr( __col__ ), Parse( "dt1:" || dt2:ColumnName[i] ),
Expr( _LSL_ ), dt2:LSL[i],
Expr( _USL_ ), dt2:USL[i],
Expr( _Target ), dt2:Target[i],
)
)
);
Re: Confrontare righe e colonne con caratteri speciali@Aam_jmp ,
Se guardi la documentazione di Parse() che puoi trovare sotto Help => Scripting Index ==> Parse ,
Parse per sua definizione si aspetta una stringa, tuttavia stai passando 2 argomenti nella tua implementazione e ti aspetti che vengano concatenati. Questo è il motivo per cui ho potuto vedere perché non funziona anche se fornisci il nome corretto della colonna. Scripting Index è tuo amico e usalo sempre di più per aiutarti con le sintassi e le definizioni delle funzioni.
Re: Confrontare righe e colonne con caratteri specialiPerché non fornisce l'output che desidero utilizzando Parse anche dopo aver fornito il nome corretto della colonna? C'è un modo per analizzare caratteri speciali come % e ()? @uday_guntupalli
Re: Confronto di righe e colonne con caratteri speciali@Aam_jmp
dt1 = data table( "Example1" );
dt2 = data table( "Example2" );
ColValuesEx2 = dt2:Column 1 << Get Values;
a = n rows(dt2);
Res= {};
For(i=1,i<=a,i++,
temp = Concat("dt1:",ColValuesEx2[i]);
Insert Into(Res,temp);
);
Show(Res);
Prova questo. Il problema che vedo con quello che stavi facendo in precedenza era che ColName non fa riferimento a una colonna reale. Quando si tenta di definire l'ambito nella tabella dati 2, è necessario fare riferimento a una colonna esistente nella tabella dati.
Ho usato concatenate invece di Parse e ottengo il risultato desiderato.

Re: Confrontare righe e colonne con caratteri speciali@uday_guntupalli Anche se non posso fornire la tabella, una parte di ciò che voglio ottenere è essere in grado di analizzare i nomi delle colonne. Ho creato tabelle di dati che sembrano in qualche modo simili. Voglio che il codice seguente funzioni per questi dati.
Names Default To Here( 1 );
dt1 = data table( "Example1" );
dt2 = data table( "Example2" );
dt4 = dt2:Column 1 << get values();
a = n rows(dt2);
For(i=1,i<=a,i++,
Parse("dt1:" || dt4[i]);
);
Re: Confrontare righe e colonne con caratteri speciali@Aam_jmp ,
Si prega gentilmente di rileggere la mia risposta e provare a utilizzare il seguente esempio. La funzione Nome sarà in grado di gestire il problema che hai. Sto postando un campione dello stesso. A meno che non condividi lo script e i dati di esempio, è difficile vedere cosa sta causando l'errore.
dt = Open( "$SAMPLE_DATA/Big Class.jmp" ); // Open Sample Data
MeanWeight = Col Sum(dt:weight); // Calculate Column Mean
dt << New Column("% of Total Weight",Numeric,Format("Percent",10,2),Continuous,Formula(:weight/MeanWeight)); // Define New column with % in name
dt << New Column("Test",Numeric,Format("Percent",10,2),Formula(Col Cumulative Sum(:Name("% of Total Weight")))); // Define Test Column that demonstrates the use of Name function that can capture the column name with % in it Spero che questo spieghi un po 'meglio il mio suggerimento, se non gentilmente offri qualche dettaglio in più in modo che io possa provare ad aiutarti
Re: Confronto di righe e colonne con caratteri specialiI nomi sono così: Titolo (%) 1, Titolo (%) 2 e così viaRe: Confronto di righe e colonne con caratteri speciali@Aam_jmp ,
Se il simbolo % fa parte del nome della colonna, ad esempio diciamo che il nome della colonna è "%x", prova a utilizzare la funzione Name() per identificare la colonna. Se potessi fornire un set di dati di esempio e il tuo script, possiamo esaminarlo per vedere cosa c'è che non va