Conversion d'une chaîne de texte en duréeSalut,
J'ai des problèmes avec la conversion d'une chaîne en une période de temps (durée).
L'un des problèmes est les espaces blancs dans la chaîne : il n'y a pas d'espace blanc entre "jours" et "heures" + nombre. Et il y a un espace blanc entre minutes + nombre.
| Temps d'enregistrement |
| 9 jours 21 heures 54 minutes |
| 6 jours 21 heures 29 minutes |
J'ai essayé d'utiliser des mots de substitution pour aller plus loin, mais cela ne semble pas fonctionner lorsqu'il n'y a pas d'espaces blancs.
J'ai aussi essayé d'utiliser "texte en colonnes" mais cela n'a pas fonctionné pour moi non plus.
Frère Julie
Re : Convertir une chaîne de texte en duréejours, heures, minutes... peut-être, peut-être pas. Si vous êtes sûr que le modèle de source de données ne change pas, vous pouvez prendre des raccourcis. Si le modèle source des données peut changer, en ajoutant peut-être un espace blanc, \s* autorisera un espace blanc facultatif à l'avenir.
Aucun de ces exemples n'est susceptible de gérer une source future qui ajoute des semaines ; ils l'ignoreront probablement silencieusement. Si vous avez forcé le modèle à correspondre du début à la fin, en utilisant ^ et $, vous pourriez probablement obtenir une valeur manquante si quelque chose d'inattendu (des semaines) se présente à l'avenir.
L'approche de Mark serait plus facile à modifier pour gérer les semaines. Mon approche serait plus facile d'ajouter le ^ et le $ pour tester quelque chose d'inattendu.
Je n'ai pas exécuté l'exemple de Mark, mais je pense que vous avez peut-être raison de dire que le \D n'est pas nécessaire.
Modifier : dans la formule de Mark, il existe trois correspondances de regex indépendantes, et elles dépendent du mot suivant les chiffres pour obtenir les bons chiffres. Dans ma formule, quelque chose doit sauter le texte constant (jours, heures, minutes). L'utilisation des mots réels rend la formule plus facile à comprendre.
Re : Convertir une chaîne de texte en duréeMerci - cela a fonctionné. Cependant, juste pour mieux comprendre cela : est-il même nécessaire d'inclure les "jours, heures, minutes" dans la formule ?
Aussi, pourquoi avez-vous besoin de "\D+" et pas seulement de "\d+" ?
Re : Convertir une chaîne de texte en duréeEt une légère variation
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 une chaîne de texte en duréeCe cas n'est pas trop mal. J'ai utilisé la fonction Regex(). Voici la formule de la colonne :
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 )
J'ai appliqué l'un des formats de durée pour les données numériques pour obtenir ce résultat :

J'ai joint le tableau de données modifié pour votre examen.