Come faccio a trovare e sostituire il codice in JSL, per rimuovere il testo da una colonna e convertirlo in formato numerico.Salve comunità JMP,
Una volta alla settimana, importo i dati .txt con una colonna della tensione della batteria (denominata "V1") in cui i valori delle righe possono essere "3,45 V", "3,34 V", "3,12 V", "3,23 V", ecc. Uso Trova e sostituisci manualmente per rimuovere la lettera "V" dai dati, quindi cambio manualmente il tipo di dati da Carattere a Numerico. Suppongo di non capire bene come includere replace() o munger() nei miei script perché ho provato e non sono riuscito a creare un JSL funzionante per questa semplice attività.
Re: Come faccio a trovare e sostituire il codice in JSL, per rimuovere il testo da una colonna e convertirlo in formato numerico.Ho trovato un errore logico nel mio codice.Di seguito è riportata una tabella di dati di esempio con un piccolo script che converte i valori sul posto.
Names Default To Here( 1 );
dt = New Table( "Example",
add rows( 100 ),
New Column( "col1", character, formula( Char( Random Integer( 78, 100 ) ) || "V" ) ),
New Column( "col2", character, formula( Char( Random Integer( 78, 100 ) ) || "V" ) )
);
dt<<RUN formulas=""></RUN>
Re: Come faccio a trovare e sostituire il codice in JSL, per rimuovere il testo da una colonna e convertirlo in formato numerico.Ciao Jim, il tuo codice non ha funzionato del tutto e non sono riuscito a capire perché. Ho caricato uno screenshot del debugger di JMP con il messaggio di errore e un sottoinsieme dei miei dati se desideri continuare ad affrontare questo problema. Sarei molto interessato a questa soluzione alternativa!

Re: Come faccio a trovare e sostituire il codice in JSL, per rimuovere il testo da una colonna e convertirlo in formato numerico.Grazie Dan,
Sono stato in grado di adattarlo al mio flusso di lavoro come:
Names Default To Here( 1 );
:Name( "V1" ) << Set Name( "orig V1" );
New Column( "V1",
Numeric,
"Continuous",
Format( "Fixed Dec", 6, 2 ),
Formula( Num( Word( 1, :orig V1, "V" ) ) )
);
Apprezzo la rapida risposta!
Re: Come faccio a trovare e sostituire il codice in JSL, per rimuovere il testo da una colonna e convertirlo in formato numerico.Vedi se qualcosa di simile funzionerà... non è stato completamente testato, ma dovrebbe essere vicino a funzionare
Names Default To Here( 1 );
dt = Current Data Table();
colNames = dt << get column names( string, character );
For( theCol = 1, thecol <= N Items( colNames ), theCol++,
For( theRow = 1, theRow <= N Rows( dt ), theRow++,
If( Right( Column( dt, theCol )[theRow], 1 ) == "V",
Column( dt, theCol )[theRow] = Substr(
Column( dt, theCol )[theRow],
1,
Length( Column( dt, theCol )[theRow] ) - 1
)
)
)
);
If( Is Missing( Num( Column( dt, theCol )[1] ) ) == 0,
Column( dt, theCol ) << data type( numeric ) << modeling type( continuous )
);Re: Come faccio a trovare e sostituire il codice in JSL, per rimuovere il testo da una colonna e convertirlo in formato numerico.Sono sempre stato un grande fan di produrre prima la soluzione in modo interattivo, poi la sceneggiatura. So che non è sempre possibile, ma puoi avvicinarti.
L'apertura del file di testo fornisce questo script (per il mio esempio, ovviamente) trovato nello script Source con la tabella JMP:
Open(
"C:\Testing.txt",
columns( New Column( "V1", Character, "Nominal" ) ),
Import Settings(
End Of Line( CRLF, CR, LF ),
End Of Field( Tab, Comma, CSV( 1 ) ),
Strip Quotes( 1 ),
Use Apostrophe as Quotation Mark( 0 ),
Use Regional Settings( 0 ),
Scan Whole File( 1 ),
Treat empty columns as numeric( 0 ),
CompressNumericColumns( 0 ),
CompressCharacterColumns( 0 ),
CompressAllowListCheck( 0 ),
Labels( 1 ),
Column Names Start( 1 ),
Data Starts( 2 ),
Lines To Read( "All" ),
Year Rule( "20xx" )
)
)
È possibile modificare in base alle esigenze del caso specifico.
Ora per rimuovere la V e convertire in numerico, creerei una seconda colonna per questo. Ciò consente il controllo degli errori nel caso in cui il formato della tensione cambi, per qualche motivo. Inoltre, offre una migliore tracciabilità dei dati. Ho creato una colonna con questa formula: Num( Word( 1, :V1, "V" ) ). Ho quindi esaminato "Copy Table Script" trovato nel pannello della tabella e ho estratto la parte correlata dello script per creare la nuova colonna.
In JSL sarebbe:
New Column( "Numeric V1",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( Num( Word( 1, :V1, "V" ) ) )
)
Mettere insieme i due dovrebbe essere la tua sceneggiatura.