Convertir una cadena de texto en duraciónHola,
Tengo problemas para convertir una cadena en un período de tiempo (duración).
Uno de los problemas son los espacios en blanco en la cadena: no hay espacios en blanco entre "días" y "horas" + número. Y hay un espacio en blanco entre minutos + número.
| Tiempo de grabación |
| 9 días 21 horas 54 minutos |
| 6 días 21 horas 29 minutos |
He intentado usar sustitutos de las palabras para avanzar pero eso no parece funcionar cuando no hay espacios en blanco.
También he tratado de usar "texto a columnas" pero tampoco funcionó para mí.
Br Julie
Re: Convertir una cadena de texto en duraciónEste caso no es tan malo. Usé la función Regex (). Aquí está la fórmula de la columna:
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 )
Apliqué uno de los formatos de Duración para datos numéricos para obtener este resultado:

Adjunto la tabla de datos modificados para su revisión.
Re: Convertir una cadena de texto en duraciónY una ligera variación
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"
)
)
)
)Re: Convertir una cadena de texto en duraciónGracias, eso funcionó. Sin embargo, solo para entender esto mejor: ¿es incluso necesario incluir los "días, horas, minutos" en la fórmula?
Además, ¿por qué necesita "\ D +" y no solo "\ d +"?
Re: Convertir una cadena de texto en duracióndías, horas, minutos ... tal vez tal vez no. Si está seguro de que el patrón de fuente de datos no cambia, puede tomar atajos. Si el patrón de origen de los datos puede cambiar, quizás agregando espacios en blanco, \ s * permitirá espacios en blanco opcionales en el futuro.
Es probable que ninguno de estos ejemplos maneje una fuente futura que agregue semanas; probablemente lo ignorarán en silencio. Si forzó la coincidencia del patrón de principio a fin, usando ^ y $, probablemente podría obtener un valor faltante si aparece algo inesperado (semanas) en el futuro.
El enfoque de Mark sería más fácil de modificar para manejar semanas. Mi enfoque sería más fácil de agregar ^ y $ para probar algo inesperado.
No ejecuté el ejemplo de Mark, pero creo que puede tener razón en que la \ D no es necesaria.
Editar: en la fórmula de Mark hay tres coincidencias de expresiones regulares independientes, y dependen de la palabra que sigue a los dígitos para obtener los dígitos correctos. En mi fórmula, algo tiene que omitir el texto constante (días, horas, minutos). Usar las palabras reales hace que la fórmula sea más fácil de entender.