Extraire le texte de la chaîneSalut,
Si possible, je voudrais extraire un texte particulier des chaînes :
\\swirt.misc@CAS-K-CLERK\K10447-Wit_OG lo salut TT-YYT (CTL1083.1)_172-7-10053 -303
\\swirt.misc@CAS-K-CLERK\K10445-Wit_OG lo salut ES WERT (CIL0858.1)_172-7-10046-600
\\swirt.misc@CAS-K-CLERK\K10437-Wit_OG salut TT-YYT (CTL1077.1)_172-7-10053-303
\\swirt.misc@CAS-K-CLERK\K10420-Wit_OG lo salut ES TRTR (CMA0851.1)_172-7-10047-600
\\swirt.misc@CAS-K-CLERK\K10377-Wit_OG_lo hi_ES_SI (CMS0499.1)_ 172-7-10041-600
\\swirt.misc@CAS-K-CLERK\K10451-Wit_OG salut TT-YYT (CTL1078
\\swirt.misc@CAS-K-CLERK\K10468-Wit_OG salut YYT DEV-020856 (CTLR1073
\\swirt.misc@CAS-K-CLERK\K10022 -Wit_OG lo salut YYT DEV-020414 (CTLR0999.1)
\\swirt.misc@CAS-K-CLERK\K10030-Wit_OG salut TT-YYT (CTL1008.1)
et je veux extraire les identifiants d'en haut :
CTL1083.1
CIL0858.1
CTL1077.1
CMA0851.1
CMS0499.1
CTL1078
CTLR1073
CTLR0999.1
CTL1008.1
Toute aide appréciée.
Merci,
Tomasz
ScriptRe: Extraire le texte d'une chaîneUtilisez la fonction MOTS avec ( et ) comme délimiteurs.Utilisez le deuxième élément dans la liste renvoyée.Exécutez le code ci-dessous et vérifiez la sortie dans la fenêtre de journal.
dt = New Table( "Test Words", Add Rows( 9 ),
New Column( "Column 1", Character, "Nominal",
Set Values(
{
"\\swirt.misc@CAS-K-CLERK\K10447-Wit_OG lo hi TT-YYT (CTL1083.1)_172-7-10053 -303",
"\\swirt.misc@CAS-K-CLERK\K10445-Wit_OG lo hi ES WERT (CIL0858.1)_172-7-10046-600",
"\\swirt.misc@CAS-K-CLERK\K10437-Wit_OG lo hi TT-YYT (CTL1077.1)_172-7-10053-303",
"\\swirt.misc@CAS-K-CLERK\K10420-Wit_OG lo hi ES TRTR (CMA0851.1)_172-7-10047-600",
"\\swirt.misc@CAS-K-CLERK\K10377-Wit_OG_lo hi_ES_SI (CMS0499.1)_ 172-7-10041-600",
"\\swirt.misc@CAS-K-CLERK\K10451-Wit_OG lo hi TT-YYT (CTL1078",
"\\swirt.misc@CAS-K-CLERK\K10468-Wit_OG lo hi YYT DEV-020856 (CTLR1073",
"\\swirt.misc@CAS-K-CLERK\K10022 -Wit_OG lo hi YYT DEV-020414 (CTLR0999.1)",
"\\swirt.misc@CAS-K-CLERK\K10030-Wit_OG lo hi TT-YYT (CTL1008.1)"}
),
Set Display Width( 583 )
)
);
for (i = 1, i <= nrows(dt), i++,
one_value = dt:column 1[i];
word_list = words(one_value, "()");
print(word_list[2]);
);Re: Extraire le texte d'une chaîneLa solution de @pmroz est très robuste, sympa !
Une approche légèrement différente pourrait consister à utiliser des formules dans le tableau de données

L'emplacement du délimiteur de début peut être localisé avec un argument "Contient"
Contains(:text, "(")
L'emplacement du délimiteur de fin pourrait être situé de la même manière
Contains( :text, ")" )
Un argument obscur mais vraiment amusant, "munger", pourrait être utilisé pour extraire la chaîne entre les emplacements des délimiteurs.
Dans ce cas, nous voulons la chaîne après le caractère délimiteur, qui se termine avant le caractère délimiteur de fin, donc 1 est ajouté au début et soustrait à la fin.
La fonction pour munger dans ce cas utilise les arguments, le texte entier, par où commencer, combien de caractères retourner. Munger peut également faire d'autres choses intéressantes, comme rechercher et remplacer.
Munger( :text, :start + 1, (:stop - :start) - 1 )
Envelopper tout cela dans une seule formule ressemblerait à ceci
Munger(
:text,
Contains( :text, "(" ) + 1,
(Contains( :text, ")" ) - Contains( :text, "(" )) - 1
)
Re: Extraire le texte d'une chaînej'utilise SUBSTR pour un effet similaire.
for (i = 1, i <= nrows(dt), i++,
one_value = dt:column 1[i];
start = contains(one_value, "(") + 1;
end = contains(one_value, ")") - 1;
len = end - start + 1;
result = substr(one_value, start, len);
print(result);
);Re: Extraire le texte d'une chaîneSi vous aimez les expressions régulières...
Names Default to Here( 1 );
// make list of example original strings
sample = "\\swirt.misc@CAS-K-CLERK\K10447-Wit_OG lo hi TT-YYT (CTL1083.1)_172-7-10053 -303
\\swirt.misc@CAS-K-CLERK\K10445-Wit_OG lo hi ES WERT (CIL0858.1)_172-7-10046-600
\\swirt.misc@CAS-K-CLERK\K10437-Wit_OG lo hi TT-YYT (CTL1077.1)_172-7-10053-303
\\swirt.misc@CAS-K-CLERK\K10420-Wit_OG lo hi ES TRTR (CMA0851.1)_172-7-10047-600
\\swirt.misc@CAS-K-CLERK\K10377-Wit_OG_lo hi_ES_SI (CMS0499.1)_ 172-7-10041-600
\\swirt.misc@CAS-K-CLERK\K10451-Wit_OG lo hi TT-YYT (CTL1078
\\swirt.misc@CAS-K-CLERK\K10468-Wit_OG lo hi YYT DEV-020856 (CTLR1073
\\swirt.misc@CAS-K-CLERK\K10022 -Wit_OG lo hi YYT DEV-020414 (CTLR0999.1)
\\swirt.misc@CAS-K-CLERK\K10030-Wit_OG lo hi TT-YYT (CTL1008.1)";
sample = Words( sample, "\!U000D" );
// Show( sample );
n = N Items( sample );
id = List();
// iterate over list and return target strings
For Each( { string }, sample,
If( Contains( string, ")" ),
Insert Into( id, Regex( string, "(.+\()(.+)(\).*)", "\2" ) ),
Insert Into( id, Regex( string, "(.+\()(.+)", "\2" ) )
);
);
Show( id );Re: Extraire le texte d'une chaîneJ'aime la fonction "Word()" pour de telles extractions de chaînes
Names Default To Here( 1 );
dt = New Table( "Test Words",
Add Rows( 9 ),
New Column( "Column 1",
Character,
"Nominal",
Set Values(
{"\\swirt.misc@CAS-K-CLERK\K10447-Wit_OG lo hi TT-YYT (CTL1083.1)_172-7-10053 -303",
"\\swirt.misc@CAS-K-CLERK\K10445-Wit_OG lo hi ES WERT (CIL0858.1)_172-7-10046-600",
"\\swirt.misc@CAS-K-CLERK\K10437-Wit_OG lo hi TT-YYT (CTL1077.1)_172-7-10053-303",
"\\swirt.misc@CAS-K-CLERK\K10420-Wit_OG lo hi ES TRTR (CMA0851.1)_172-7-10047-600",
"\\swirt.misc@CAS-K-CLERK\K10377-Wit_OG_lo hi_ES_SI (CMS0499.1)_ 172-7-10041-600",
"\\swirt.misc@CAS-K-CLERK\K10451-Wit_OG lo hi TT-YYT (CTL1078",
"\\swirt.misc@CAS-K-CLERK\K10468-Wit_OG lo hi YYT DEV-020856 (CTLR1073",
"\\swirt.misc@CAS-K-CLERK\K10022 -Wit_OG lo hi YYT DEV-020414 (CTLR0999.1)",
"\\swirt.misc@CAS-K-CLERK\K10030-Wit_OG lo hi TT-YYT (CTL1008.1)"}
),
Set Display Width( 583 )
)
);
For( i = 1, i <= N Rows( dt ), i++,
Print( Word( 2, dt:column 1[i], "()" ) )
);Re : Extraire le texte d'une chaîne@pmroz , ton code a toujours l'air beaucoup moins aléatoire que le mien ; )
La sous-chaîne (substr) est une approche plus simple, je ne peux tout simplement pas résister à un bon cas pour munger.
Craig Hales a probablement des approches encore plus efficaces en utilisant le pattern matching. Je suis sûr qu'il y a déjà quelques exemples dans les pages de la communauté ou sur sa page de blog.
Re : Extraire le texte d'une chaîneWow de nombreuses façons de trancher une miche de pain dans JMP.
Re : Extraire le texte d'une chaînetrès agréable, toutes les suggestions fonctionnent la magie.
J'ai utilisé le Munger dans mon script et fonctionne parfaitement.
Merci beaucoup
Tomász