Come mantenere la formattazione e i commenti con New Script ()?Ciao a tutti,
sono di nuovo io. Altro giorno, altra domanda 
Così ho realizzato un bel lungo script che crea una nuova tabella dati che contiene alcuni script. Io uso la funzione New Script () per fare questo.
dt<< New script ("myscript",
// comments
//beautiful indentation
(
(
( ( instructions) )
)
)
)
);
Il mio problema è che quando controllo lo script Inside the table dt, tutti i commenti vengono persi, così come il layout, il mio stile personale di indentazione, le righe vuote, ecc.
Questi script sono destinati a utenti che non hanno necessariamente familiarità con JSL, quindi ho bisogno di mantenere i commenti e il layout originale.
Stavo cercando di fare qualcosa come mettere i miei script in una stringa e usare Append() o Append Text() ma non ci sono riuscito.
mystring = " \[ // all my
// script
]\" ;
myscript = dt<<NEW script=""></NEW>Purtroppo questo non ha funzionato. Qualche idea ? Alcuni trucchi usando Expr/ Eval , ecc forse?
Ri: Come mantenere la formattazione e i commenti con New Script ()?bene, bene, bene, sembra che abbiamo un vincitore!
Mi piace quando passi giorni a macinare i tuoi ingranaggi su un problema apparentemente impossibile e poi qualcuno rivela che la soluzione è un copione di una riga :faccia_con_lacrime_di_gioia:
molte grazie @XanGregg 
Ri: Come mantenere la formattazione e i commenti con New Script ()?JSL Quote() potrebbe aiutare:
New Table( "formatted script",
New Script( "my script",
Eval( Parse(JSL Quote(
// example
x = 1;
Print( :column 1[1], y );
) )
)
),
New Column( "Column 1", Set Values( [5] ) )
)
Ri: Come mantenere la formattazione e i commenti con New Script ()?Hai detto, " Per quanto posso vedere non c'è modo di fare riferimento a uno script all'interno di una tabella di dati e questo è il problema. Quello che voglio dire è che non esiste un datatable: myscript o datatable< " Puoi inviare questo messaggio alla tabella dati, dopo aver eseguito il mio codice di esempio sopra:
dt << Get Script( "My Script" );
Ora posso utilizzare le funzioni di espressione o stringa di caratteri per modificare lo script dalla tabella dati.
Ri: Come mantenere la formattazione e i commenti con New Script ()?CIAO @Mark_Bailey ,
Grazie per questo pezzo di codice, è davvero utile.
Quindi questo risolve un punto: il contenuto di una finestra di script può essere salvato in uno script.
Ma la prima parte sembra ancora vera "gli script JMP non possono essere modificati da un altro script". Lo script che hai fornito scrive ogni volta un nuovo script con la funzione New Script ();
Per quanto posso vedere non c'è modo di fare riferimento a uno script all'interno di una tabella di dati e questo è il problema. Quello che voglio dire è che non esiste un datatable: myscript o datatable<
tutto ciò che si può fare è copiare gli script e poi incollarli in un nuovo script. Ma in effetti ciò non risolve il problema in quanto lo trasforma in un'espressione JSL, eliminando commenti e formattazione nel processo.
Penso che sia giunto il momento di ammettere che al momento non esiste una soluzione. È nella lista dei desideri di JMP, così come @Jeff_Perkinson menzionato,
tutti gli interessati si prega di assicurarsi di kudo Conserva i commenti e gli spazi bianchi nel codice JSL allegati ai dati !!
Ri: Come mantenere la formattazione e i commenti con New Script ()?Gli script di tabella potrebbero eseguire gli script salvati in questo modo.
Include( "My Path/My Script.jsl" );
Puoi inserire gli script ovunque (ad esempio, una singola cartella di repository) e includere il percorso completo.
Ri: Come mantenere la formattazione e i commenti con New Script ()?Hai detto, " sembra che gli script JMP non possano essere modificati da un altro script. Stavo cercando di scrivere il mio script in una casella di script All'interno di una finestra.Ma per quanto posso vedere, il contenuto di una casella di script non può essere salvato in una tabella di dati. "
È possibile. Potrebbe non essere ovvio. Tuttavia, richiede tecniche di scripting che non sono di base. Ecco un esempio per illustrare come potrebbe essere fatto. Esso
Names Default to Here( 1 );
script window = New Window( "Script", << Modal,
sb = Script Box( "print(\!"Hello\!");" ),
H List Box(
Button Box( "OK", s = sb << Get Lines ),
Button Box( "Cancel" )
)
);
If( script window["Button"] == -1,
Throw( "User cancelled" );
);
Print( s );
n = N Items( s );
script = s[1];
For( line = 2, line <= n, line++,
script ||= "\!n" || s[line];
);
Print( script );
Eval( Parse( script ) );
Eval(
Substitute(
Expr( Current Data Table() << New Script( "My Script", sss ) ),
Expr( sss ),
Parse( script )
)
);
Tuttavia, lo script della tabella perde la formattazione perché la funzione Parse() lo scarta, proprio come l'interprete JSL. Quindi questo esempio non risolve il tuo problema originale.
Ri: Come mantenere la formattazione e i commenti con New Script ()?Grazie markbayley,
questo è un pezzo di codice utile. Immagino che si possano salvare i file .jsl nella stessa cartella della tabella dati con cui vengono utilizzati. Sarebbe un modo ragionevole di fare le cose.Ri: Come mantenere la formattazione e i commenti con New Script ()?Ci siamo imbattuti in questo problema durante i nostri corsi di formazione JMP sullo scripting. Abbiamo imposto uno stile e un formato particolari per rendere il codice il più chiaro possibile, quindi abbiamo voluto mantenerlo in ogni momento. La nostra soluzione era sfruttare il diario JMP creato per ogni corso. Abbiamo aggiunto un pulsante per ogni script che forniamo nel corso. Lo script del pulsante memorizza lo script formattato come una stringa di caratteri in un file di script e quindi lo apre o lo esegue. Ecco un esempio molto semplice per illustrare cosa fa il pulsante journal:
script = "dt = Open( \!"$SAMPLE_DATA/Big Class.jmp\!" );
dist = dt << Distribution( Y( :weight, :height ) );";
Save Text File( "My Script.jsl", script );
Open( "My Script.jsl" );
Questa soluzione funziona bene per il nostro scopo nella formazione. Non credo però che ti sarà d'aiuto.
Ri: Come mantenere la formattazione e i commenti con New Script ()?Aggiornamento :
sembra che gli script JMP non possano essere modificati da un altro script. Stavo cercando di scrivere il mio script in una casella di script All'interno di una finestra.Ma per quanto posso vedere, il contenuto di una casella di script non può essere salvato in una tabella di dati.
Sembra che questo non sia fattibile, dopo tutto.
Un paio di opzioni di backup a metà cottura però:
- Usando \[...]\, posso salvare il mio script nella tabella dati come stringa di testo. Gli utenti possono quindi andare a dare un'occhiata per vedere i commenti. Potrebbero anche copiare e incollare quella stringa in un nuovo script e ottenere il layout e i commenti originali. Non così eccezionale anche se richiede alcuni input da parte dell'utente.
- Un'altra opzione di fallback sarebbe quella di creare una funzione di commento nello script che stampa i commenti nel registro. Inoltre, non è un'ottima opzione, poiché per impostazione predefinita, gli script eseguiti da una tabella di dati non hanno un registro integrato.
- Oppure potrei semplicemente avere il mio codice sorgente disponibile come risorsa in un documento word o pdf.
Altre idee, approfondimenti ??
Ri: Come mantenere la formattazione e i commenti con New Script ()?Grazie Jeff,
Temevo che questa sarebbe stata la risposta. Tuttavia, penso che potrebbe esserci una soluzione fai-da-te per aggirare questo ...
Ad esempio, ho provato a inserire tutto il mio script in un'istruzione Expr () ed è stato esportato correttamente. Ovviamente nello script finale tutto è ancora tra le parentesi dell'Expr.
Ma forse uno script di modifica del testo potrebbe leggerlo ed eliminare Expr e le parentesi per avere il testo originale?
quindi la mia domanda è, è possibile? Uno script può modificare un altro script in questo modo?
O forse potrei salvare gli script della mia tabella di dati come file .jsl separati e quindi importarli automaticamente dalla tabella?
Dai, ci deve essere un modo per farlo 
Ri: Come mantenere la formattazione e i commenti con New Script ()?Sfortunatamente, JMP non è progettato per mantenere i commenti e la formattazione per gli script allegati alla tabella dati. Questo è stato richiesto nella Wish List di JMP: Conserva commenti e spazi bianchi nel codice JSL . Assicurati di ringraziarlo per indicare il tuo supporto. Mi assicurerò che gli sviluppatori siano consapevoli del desiderio.