Extraire des nombres de longueurs variables 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.
Donc le format typique serait : (0-365)d(0-24)h(0-60)m(0-60)m
Voici quelques exemples.:
0j 15h 47m 43m
10j 10h 21m 54m
0j 04h 07m 32m
268j 06h 02m 33m
J'ai besoin d'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, extrait le troisième et le quatrième nombre 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 une façon détournée d'arriver au résultat.
Je me demandais si quelqu'un pouvait m'aider d'une manière plus efficace.
Tableau de donnéesScriptRe : 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 colonnesMarquer
J'avais l'impression que le résultat apparaîtra 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 un script séparé. 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 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 colonnesMarquer,
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 y entrer la liste des éléments + créer une autre colonne "jour" et utiliser la "boucle for" comme formule dans cette colonne,
et d'autres manières.
J'obtiens une erreur.
J'ai également essayé de chercher de l'aide dans l'index de script.
Mais je n'arrive pas à faire fonctionner le script.Je suis novice en matière de script. Peux-tu aider s'il te plait.
Re : Extraire des nombres de longueurs variables d'une chaîne dans différentes colonnesVous avez obtenu de bonnes solutions jusqu'à présent, mais je soulignerais que vous étiez très proche de votre utilisation de la Mots() fonction.
Vous pouvez spécifier plus d'un délimiteur dans le dernier argument de la fonction Words() afin que vous puissiez 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 formules, 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.
Ce sujet combine deux de mes fonctionnalités préférées, la fonction Word() (ou Words()) et les dates et heures. Voici les messages que j'ai écrits expliquant chacun d'eux:
Si vous n'apprenez qu'une seule fonction de l'éditeur de formules, Word() est celle
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 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 extraire le fichier d, sec et jmp avec la formule enregistrée pour le jour, l'heure, la seconde jointe.


Re : Extraire des nombres de longueurs variables d'une chaîne dans différentes colonnesCet exemple montre comment utiliser des 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 nombre est dans un groupe de capture bien que vous n'ayez 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" ) )