Extraire des nombres de différentes longueurs d'une chaîne dans différentes colonnesJ'ai une colonne nommée Durée avec des valeurs qui représentent le nombre de jours, d'heures, de minutes et de secondes. Le dernier m désigne les secondes.
Le format typique serait donc : (0-365)d(0-24)h(0-60)m(0-60)m
Voici quelques exemples.:
0j 15h 47m 43m
10j 10h 21min 54min
0j 04h 07m 32m
268j 06h 02min 33min
Je dois extraire le nombre de jours, d'heures, de minutes et de secondes dans différentes colonnes afin de pouvoir effectuer des calculs dessus.
J'ai essayé la formule pour extraire le nombre de jours,
Words( :Duration, "d" )[1]
Pour extraire le deuxième nombre - j'ai utilisé la formule :
Substr( Item( 2, :Duration ), 1, 2 );
De la même manière, extrayez les troisième et quatrième nombres en utilisant 3 et 4 dans la formule Item.
Pour convertir ces chaînes en numérique, j'ai créé 4 colonnes supplémentaires, copié et collé et changé le type de données en numérique.
Je comprends que c'est un chemin détourné pour arriver au résultat.
Je me demandais si quelqu'un pouvait m'aider de manière plus efficace.
Modélisation statistique avancéeÉtudes de consommation et de marchéAccès aux donnéesConception d'expériencesPersonnalisation de masseIngénierie Qualité et ProcédésPartager et communiquer les résultatsRe : Extraire des nombres de longueurs variables d'une chaîne dans différentes colonnesMerci beaucoup de m'avoir indiqué le journal. J'ai vu le résultat là-bas. Auparavant, je pensais que le résultat apparaîtrait dans une fenêtre séparée.
Re : Extraire des nombres de longueurs variables d'une chaîne dans différentes colonnesMarque
J'avais l'impression que le résultat apparaîtrait dans une fenêtre séparée. Maintenant, j'ai regardé dans le journal - et j'y ai vu le résultat - autant de fois que j'avais exécuté le script.
Re : Extraire des nombres de longueurs variables d'une chaîne dans différentes colonnes@txnelson est correct. Il vous a montré comment l'utiliser comme script distinct. Cette expression est tout ce dont vous avez besoin pour une formule de colonne :
Num( Regex( cell[i], "(\d+)d (\d+)h (\d+)m (\d+)m", "\1" ) )
Re : Extraire des nombres de longueurs variables d'une chaîne dans différentes colonnes@Mark_Bailey le script est un JSL autonome.Vous l'exécutez en le plaçant dans une fenêtre de script et en exécutant le script.Je l'ai fait et cela a très bien fonctionné, donnant les résultats suivants dans le journal JMP
day = 0;
day = 10;
day = 0;
day = 268;
Re : Extraire des nombres de longueurs variables d'une chaîne dans différentes colonnesMarque,
J'ai essayé d'utiliser votre script de différentes manières
a) en utilisant le script dans l'éditeur de script et en l'exécutant,
b) créer une colonne avec le nom "cellule" et entrer la liste des éléments qu'elle contient + créer une autre colonne "jour" et utiliser la "boucle for" comme formule dans cette colonne,
et d'autres moyens.
J'obtiens une erreur.
J'ai également essayé de chercher de l'aide dans l'index des scripts.
Mais je n'arrive pas à faire fonctionner le script.Je suis nouveau dans les scripts. Peux-tu aider s'il te plait.
Re : Extraire des nombres de longueurs variables d'une chaîne dans différentes colonnesVous avez trouvé de bonnes solutions jusqu'à présent, mais je tiens à souligner que vous étiez très proche de votre utilisation du Mots() fonction.
Vous pouvez spécifier plusieurs délimiteurs dans le dernier argument de la fonction Words() pour pouvoir faire ceci :
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
);
Dans le journal :
/*:
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"};
Le voici dans l'éditeur de formule, avec le Fonctions En jours(), En heures(), En minutes() pour convertir les valeurs numériques en nombre de secondes dans chacune de ces unités, pour créer une colonne Durée.

J'ai également joint le tableau de données ici.
Cette rubrique combine deux de mes fonctionnalités préférées, la fonction Word() (ou Words()) et les dates et heures. Voici les articles que j'ai écrits expliquant chacun d'eux :
Si vous n'apprenez qu'une seule fonction de l'éditeur de formule, Word() est celle-là.
Utilisation de dates, d'heures, de dates-heures et de durées dans JMP
Re : Extraire des nombres de longueurs variables d'une chaîne dans différentes colonnesPaul- J'ai appris une nouvelle fonction. Merci beaucoup pour votre version détaillée et simplifiée de la solution.!
Re : Extraire des nombres de longueurs variables d'une chaîne dans différentes colonnesParfait. Merci beaucoup pour votre description et vos captures d'écran. M'a fait gagner du temps dans d'autres cas en utilisant le recode.
Re : Extraire des nombres de longueurs variables d'une chaîne dans différentes colonnesUtilisez Recode -Formula Column - sous le point chaud Nouvelles valeurs, sélectionnez Avancé - Extraire le segment. Captures d'écran pour l'extrait des fichiers d, sec et jmp avec la formule enregistrée pour le jour, l'heure et la seconde en pièce jointe.


Re : Extraire des nombres de longueurs variables d'une chaîne dans différentes colonnesCet exemple illustre comment utiliser les expressions régulières.
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 );
);Re : Extraire des nombres de longueurs variables d'une chaîne dans différentes colonnesExemple de tableau ci-joint.
Re : Extraire des nombres de longueurs variables d'une chaîne dans différentes colonnesQue diriez-vous d'utiliser Regex :
Pour la journée:
Num( Regex( :Duration, "(\d+)d\s(\d+)h\s(\d+)m\s(\d+)m", "\1" ) )
Pour l'heure :
Num( Regex( :Duration, "(\d+)d\s(\d+)h\s(\d+)m\s(\d+)m", "\2" ) )
Pour la Minute :
Num( Regex( :Duration, "(\d+)d\s(\d+)h\s(\d+)m\s(\d+)m", "\3" ) )
Pour le Deuxième :
Num( Regex( :Duration, "(\d+)d\s(\d+)h\s(\d+)m\s(\d+)m", "\4" ) )
Chaque numéro est dans un groupe de capture même si vous n'avez vraiment pas besoin de capturer les autres. Vous pourriez le simplifier avec ceux-ci :
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" ) )