Script da trovare e sostituireUso un programma GCMS che aggiunge "saturo (####)" quando un conteggio dell'area di picco è saturo.Dopo aver esportato questi risultati da Excel in una tabella di dati JMP, vorrei eseguire uno script che trova queste occorrenze e rimuove il "saturo ()" ma lascia il numero in formato numerico continuo 12,0.
Personalizzazione di massaCondivisione e comunicazione dei risultatiRi: Script da trovare e sostituireIl codice che ho fornito sopra scrive solo nel file Registro JMP . Sembra @txnelson ti ha già detto come gestire la tua colonna 'Area'. Se lo desideri, puoi utilizzare una combinazione del codice di corrispondenza del modello e del suo JSL.
Con tutte queste cose si riduce a ciò che puoi tranquillamente assumere sulla regolarità dell'input. Mentre l'approccio di corrispondenza del modello è (leggermente) più generale (e potrebbe facilmente essere reso più così), nel tuo caso potrebbe non avere importanza.
Ri: Script da trovare e sostituireProva questo sulla tua colonna Area
Names Default To Here( 1 );
dt = Current Data Table();
// Loop across all character columns and find those who have the pattern (###)
// and if found, then convert all columns
For( k = 1, k <= N Rows( dt ), k++,
If( Contains( :Area[k], "(" ),
:Area[k] = Word( 2, :Area[k], "()" )
)
);
:Area << data type( numeric ) << modeling type( continuous ) << Format( "Fixed Dec", 12, 0 );Ri: Script da trovare e sostituirePurtroppo non è successo niente quando ho eseguito la sceneggiatura.Ho incluso una schermata dei miei dati insieme agli attributi della colonna, se questo aiuta.Grazie ancora!

Ri: Script da trovare e sostituireSe ho capito bene, questa potrebbe essere un'occasione da usare Corrispondenza del modello di JMP (grazie a @Craige_Hales 


NamesDefaultToHere(1);
// Define a function
removeSaturated =
Function({inStr}, {Default Local},
// A pattern that will match a span of digits, with or without a leading '-'
digits = (""|"-") + patSpan("0123456789");
// Put the match into 'found' (might be identical to 'inStr')
patMatch(inStr, digits >? found);
// Return 'found' as a number
Num(found);
);
// Try it out
Print(removeSaturated("saturated( 635403558 )"));
Print(removeSaturated("saturated(635403558)"));
Print(removeSaturated("635403558"));
Print(removeSaturated("635403"));
Print(removeSaturated("-635403"));
Print(removeSaturated("saturated( -635403 )"));
Ri: Script da trovare e sostituireLo script prevede che "(" sia il primo carattere e ")" l'ultimo carattere.È possibile che i caratteri vuoti siano all'inizio o alla fine?
prova questa versione dello script e vedi se aiuta
Names Default To Here( 1 );
dt = Current Data Table();
// Get all character columns
colList = dt << get column names( character, string );
// Loop across all character columns and find those who have the pattern (###)
// and if found, then convert all columns
For( I = 1, i <= N Items( colList ), i++,
If( Left( Trim( Char( Column( dt, colList[i] )[1] ) ), 1 ) == "(" & Right( Trim( Char( Column( dt, colList[i] )[1] ) ), 1 ) == ")",
For( k = 1, k <= N Rows( dt ), k++,
If( Left( (Trim( Column( dt, colLIst[i] ) )[k]), 1 ) == "(",
Column( dt, colList[i] )[k] = Substr( Trim( Column( dt, colList[i] )[k] ), 2 )
);
If( Right( Trim( Column( dt, colList[i] )[k] ), 1 ) == ")",
Column( dt, colList[i] )[k] = Word( 1, Column( dt, colList[i] )[k], ")" )
);
);
// Convert to numeric, etc.
Column( dt, colList[i] ) << data type( numeric ) << modeling type( continuous ) << Format( "Fixed Dec", 12, 0 );
)
);Ri: Script da trovare e sostituireGrazie per la sceneggiatura, ma sembra che non sia stato abbastanza specifico.La scrittura della sceneggiatura è molto nuova per me e ho pensato che la lunghezza del numero non avesse importanza.Immagino che fosse sbagliato.Ho giocato con la sceneggiatura ma non sono riuscito a farla trasformare "saturato ( 635403558 )" in 635403558.Apprezzo il vostro aiuto.
Ri: Script da trovare e sostituireIn modo interattivo, è abbastanza semplice utilizzare la funzionalità Trova per eseguire una sostituzione globale di "(" e ")".Quindi, utilizzando Standardizza attributi è possibile selezionare tutte le colonne in questione e modificarle in numerico, continuo, formato (Fixed Dec, 12,0)
Trova è disponibile su
Modifica=>Cerca=>Trova
Standardizza attributi è disponibile sotto il triangolo rosso nel pannello Colonne sul lato sinistro della tabella dati.
Ecco un piccolo script che farà anche il trucco, ma con una grande tabella di dati, potrebbe essere lento
Names Default To Here( 1 );
dt = Current Data Table();
// Get all character columns
colList = dt << get column names( character, string );
// Loop across all character columns and find those who have the pattern (###)
// and if found, then convert all columns
For( I = 3, i <= N Items( colList ), i++,
If( Left( char(Column( dt, colList[i] )[1]), 1 ) == "(" & Right( char(Column( dt, colList[i] )[1]), 1 ) == ")",
For( k = 1, k <= N Rows( dt ), k++,
If( Left( (Column( dt, colLIst[i] )[k]), 1 ) == "(",
Column( dt, colList[i] )[k] = Substr( Column( dt, colList[i] )[k] ,
2)
);
If( Right( (Column( dt, colList[i] )[k]), 1 ) == ")",
Column( dt, colList[i] )[k] = Word( 1, Column( dt, colList[i] )[k], ")" )
);
);
// Convert to numeric, etc.
Column( dt, colList[i] ) << data type( numeric ) << modeling type( continuous ) <<
Format( "Fixed Dec", 12, 0 );
)
);