Conversione di una stringa di testo in durataCiao,
Ho problemi con la conversione di una stringa in un periodo di tempo (durata).
Uno dei problemi sono gli spazi bianchi nella stringa: non c'è spazio bianco tra "giorni" e "ore" + numero. E c'è uno spazio bianco tra minuti + numero.
| Tempo di registrazione |
| 9 giorni 21 ore 54 minuti |
| 6 giorni 21 ore 29 minuti |
Ho provato a usare la sostituzione delle parole per andare più avanti, ma non sembra funzionare quando non ci sono spazi bianchi.
Ho anche provato a usare "testo in colonne" ma non ha funzionato neanche per me.
Fr. Julie
Ri: Conversione di una stringa di testo in duratagiorni, ore, minuti... forse, forse no. Se sei sicuro che il modello dell'origine dati non cambierà, puoi prendere scorciatoie. Se il modello di origine dei dati potrebbe cambiare, magari aggiungendo spazi bianchi, \s* consentirà spazi bianchi facoltativi in futuro.
È probabile che nessuno di questi esempi gestisca una fonte futura che aggiunge settimane; probabilmente lo ignoreranno silenziosamente. Se hai forzato lo schema a corrispondere dall'inizio alla fine, utilizzando ^ e $, potresti probabilmente ottenere un valore mancante se qualcosa di inaspettato (settimane) si presenta in futuro.
L'approccio di Mark sarebbe più facile da modificare per gestire le settimane. Il mio approccio sarebbe più semplice aggiungere ^ e $ per verificare qualcosa di inaspettato.
Non ho eseguito l'esempio di Mark, ma penso che potresti avere ragione sul fatto che \D non è necessario.
Modifica: nella formula di Mark ci sono tre corrispondenze regex indipendenti e dipendono dalla parola che segue le cifre per ottenere le cifre giuste. Nella mia formula, qualcosa deve saltare il testo costante (giorni, ore, minuti). L'uso delle parole reali rende la formula più facile da capire.
Ri: Conversione di una stringa di testo in durataGrazie - ha funzionato. Tuttavia, giusto per capirci meglio: è necessario includere anche i "giorni, ore, minuti" nella formula?
Inoltre, perché hai bisogno di "\D+" e non solo di "\d+"?
Ri: Conversione di una stringa di testo in durataE una leggera variazione
New Table( "Rec_time",
Add Rows( 8 ),
New Column( "Recording time",
Character,
"Nominal",
Set Values(
{"9days21hours54minutes", " 6 days 21 hours 29 minutes",
"2days 21 hours 24 minutes", "13days 20hours04minutes",
" 9 days 21hours 54 minutes", "9days 21hours 54 minutes",
"9days 21hours 54 minutes", "6days 20hours 39 minutes"}
),
Set Display Width( 240 )
),
New Column( "data",
Numeric,
"Nominal",
Format( ":day:hr:m", 14 ),
Input Format( ":day:hr:m" ),
Formula(
Informat(
Regex(
:Recording time,
"(\d+)\s*days\s*(\d+)\s*hours\s*(\d+)\s*minutes",
":\1:\2:\3"
),
":day:hr:m"
)
)
)
)Ri: Conversione di una stringa di testo in durataQuesto caso non è male. Ho usato la funzione Regex(). Ecco la formula della colonna:
Num( Regex( :Recording time, "(\d+)day", "\1" ) ) * In Days( 1 )
+Num( Regex( :Recording time, "\D+(\d+)hour", "\1" ) ) * In Hours( 1 )
+Num( Regex( :Recording time, "\D+(\d+) minute", "\1" ) ) * In Minutes( 1 )
Ho applicato uno dei formati Durata per i dati numerici per ottenere questo risultato:

Ho allegato la tabella dei dati modificata per la tua revisione.