Estrarre numeri di lunghezza variabile da una stringa in colonne diverseHo una colonna denominata Durata con valori che rappresentano il numero di giorni, ore, min e sec. L'ultima m indica i secondi.
Quindi il formato tipico sarebbe: (0-365)d(0-24)h(0-60)m(0-60)m
Ecco alcuni esempi.:
0g 15h 47m 43m
10 giorni 10 ore 21 minuti 54 minuti
0g 04h 07m 32m
268g 06h 02m 33m
Devo estrarre il numero di giorni, ore, minuti e secondi in diverse colonne in modo da poter eseguire calcoli su di esso.
Ho provato la formula per estrarre il numero di giorni,
Words( :Duration, "d" )[1]
Per estrarre il secondo numero - ho usato la formula:
Substr( Item( 2, :Duration ), 1, 2 );
Allo stesso modo estrai il terzo e il quarto numero usando 3 e 4 nella formula Item.
Per convertire queste stringhe in numerico, ho creato altre 4 colonne, copiato e incollato e modificato il tipo di dati in numerico.
Capisco che questo è un modo indiretto per arrivare al risultato.
Mi chiedevo se qualcuno potesse aiutarmi con un modo più efficiente.
Tabella datiScriptingOggetto: estrarre numeri di lunghezza variabile da una stringa in colonne diverseGrazie mille per avermi indicato il registro. Ho visto il risultato lì. In precedenza pensavo che il risultato sarebbe stato visualizzato in una finestra separata.
Oggetto: estrarre numeri di lunghezza variabile da una stringa in colonne diverseSegno
Avevo l'impressione che il risultato sarebbe stato visualizzato in una finestra separata. Ora, ho esaminato il registro e ho visto il risultato lì, tutte le volte che avevo eseguito lo script.
Oggetto: estrarre numeri di lunghezza variabile da una stringa in colonne diverse@txnelson è corretta. Ti ha mostrato come usarlo come script separato. Questa espressione è tutto ciò di cui hai bisogno per una formula di colonna:
Num( Regex( cell[i], "(\d+)d (\d+)h (\d+)m (\d+)m", "\1" ) )
Oggetto: estrarre numeri di lunghezza variabile da una stringa in colonne diverse@Mark_Bailey script è un JSL autonomo.Lo esegui inserendolo in una finestra di script ed eseguendo lo script.L'ho fatto e ha funzionato alla grande, fornendo i seguenti risultati nel registro JMP
day = 0;
day = 10;
day = 0;
day = 268;
Oggetto: estrarre numeri di lunghezza variabile da una stringa in colonne diverseSegno,
Ho provato a utilizzare il tuo script in molti modi diversi
a) utilizzando lo script nell'editor di script ed eseguendolo,
b) creare una colonna con il nome "cella" e inserire l'elenco di elementi in essa + creare un'altra colonna "giorno" e utilizzare il "ciclo for" come formula in quella colonna,
e altri modi.
Ottengo un errore.
Ho provato a cercare aiuto anche nell'indice di scripting.
Ma non riesco a far funzionare lo script.Sono nuovo allo scripting. Puoi per favore aiutare.
Oggetto: estrarre numeri di lunghezza variabile da una stringa in colonne diverseFinora hai ottenuto delle buone soluzioni, ma vorrei sottolineare che eri molto vicino al tuo uso di Parole() funzione.
Puoi specificare più di un delimitatore nell'ultimo argomento della funzione Words() in modo da poter fare questo:
vals={"0d 15h 47m 43m", "10d 10h 21m 54m","0d 04h 07m 32m", "268d 06h 02m 33m"};
for (i=1, i<=nitems(vals), i++,
show(words(vals[i], "dhm ")) //use "d" "h" "m" and a space as delimiters
);
Nel registro:
/*:
Words(vals[i], "dhm ") = {"0", "15", "47", "43"};
Words(vals[i], "dhm ") = {"10", "10", "21", "54"};
Words(vals[i], "dhm ") = {"0", "04", "07", "32"};
Words(vals[i], "dhm ") = {"268", "06", "02", "33"};
Eccolo nell'editor di formule, insieme al file Funzioni In Giorni(), In Ore(), In Minuti() per convertire i valori numerici nel numero di secondi in ciascuna di queste unità, per creare una colonna Durata.

Ho allegato anche la tabella dei dati qui.
Questo argomento combina due delle mie funzionalità preferite, la funzione Word() (o Words()) e le date e gli orari. Ecco i post che ho scritto spiegando ciascuno di essi:
Se impari solo una funzione dell'editor di formule, Word () è quella
Utilizzo di date, ore, datetime e durate in JMP
Oggetto: estrarre numeri di lunghezza variabile da una stringa in colonne diversePaul- Ho imparato una nuova funzione. Grazie mille per la tua versione dettagliata e semplificata della soluzione.!
Oggetto: estrarre numeri di lunghezza variabile da una stringa in colonne diversePerfetto. Grazie mille per la descrizione e gli screenshot. Mi ha fatto risparmiare tempo in altri casi utilizzando la ricodifica.
Oggetto: estrarre numeri di lunghezza variabile da una stringa in colonne diverseUsa Recode -Formula Column-sotto l'hot spot New values selezionare Advanced - Extract Segment. Schermate per estrarre il file d, sec e jmp con la formula salvata per giorno, ora, secondo allegato.


Oggetto: estrarre numeri di lunghezza variabile da una stringa in colonne diverseQuesto esempio illustra come utilizzare le espressioni regolari.
Names Default To Here( 1 );
cell = {"0d 15h 47m 43m", "10d 10h 21m 54m", "0d 04h 07m 32m", "268d 06h 02m 33m"};
For( i = 1, i <= N Items( cell ), i++,
day = Num( Regex( cell[i], "(\d+)d (\d+)h (\d+)m (\d+)m", "\1" ) );
Show( day );
);Oggetto: estrarre numeri di lunghezza variabile da una stringa in colonne diverseTabella di esempio allegata.
Oggetto: estrarre numeri di lunghezza variabile da una stringa in colonne diverseChe ne dici di usare Regex:
Per il giorno:
Num( Regex( :Duration, "(\d+)d\s(\d+)h\s(\d+)m\s(\d+)m", "\1" ) )
Per l'ora:
Num( Regex( :Duration, "(\d+)d\s(\d+)h\s(\d+)m\s(\d+)m", "\2" ) )
Per il minuto:
Num( Regex( :Duration, "(\d+)d\s(\d+)h\s(\d+)m\s(\d+)m", "\3" ) )
Per il secondo:
Num( Regex( :Duration, "(\d+)d\s(\d+)h\s(\d+)m\s(\d+)m", "\4" ) )
Ogni numero è in un gruppo di acquisizione anche se in realtà non è necessario catturare gli altri. Potresti semplificarlo con questi:
Num( Regex( :Duration, "(\d+)d\s\d+h\s\d+m\s\d+m", "\1" ) )
Num( Regex( :Duration, "\d+d\s(\d+)h\s\d+m\s\d+m", "\1" ) )
Num( Regex( :Duration, "\d+d\s\d+h\s(\d+)m\s\d+m", "\1" ) )
Num( Regex( :Duration, "\d+d\s\d+h\s\d+m\s(\d+)m", "\1" ) )