Rechercher dans chaque cellule d'une colonne pour trouver un contenu spécifiqueSalut tout le monde,
J'ai une table de données jmp avec une colonne qui contient différentes chaînes sur chaque ligne. Je voudrais savoir si je peux boucler cette colonne pour trouver une partie spécifique de la chaîne dans cette cellule.
Voici un exemple de chaînes :
Classe : 10 Table : 15 Stat : NA loc : NA professeur : Sam --> contenu de la cellule
Classe : 11 Tableau : 11 Stat : NA loc : NA professeur : Sam
Le défi est que j'ai un numéro de classe différent et un numéro de table différent. Cependant, il me suffit de trouver les cellules commençant par « Classe : # » et de récupérer le reste des cellules dans une liste.
Ma question est donc la suivante : puis-je effectuer une recherche de cellule partielle dans cette colonne spécifique ?
Automatisation et scriptsAnalyse et modélisation des données de baseRe : Rechercher chaque cellule d'une colonne pour trouver un contenu spécifiqueC'est une façon possible de gérer cela
Names Default To Here( 1 );
dt = Current Data Table();
foundList = {};
For Each Row(
If(
Word( 1, thestringcolumn, " " ) & Is Missing(
Num( word * 2, thestringcolumn, " " )
) == 0,
Insert Into(
foundList,
Substr(
thestringcolumn,
Length( Word( 1, thestringcolumn, " " ) )
+Length( Word( 2, thestringcolumn, " " ) ) + 2
)
)
)
);Re : Rechercher chaque cellule d'une colonne pour trouver un contenu spécifiqueEn fonction de votre format de chaîne, vous pouvez peut-être utiliser Recode (notez que Conserver le texte si aucune correspondance n'est cochée)

ou un script utilisant For Each Row. Si vous utilisez For Each Row, vous disposez de nombreuses options différentes pour analyser la chaîne et comment stocker vos résultats. Vous trouverez ci-dessous un autre exemple.
Names Default To Here(1);
dt = New Table("Untitled",
Add Rows(2),
Compress File When Saved(1),
New Column("Column 1",
Character,
"Nominal",
Set Values(
{"Class: 10 Table:15 Stat:NA loc:NA teacher:Sam",
"Class: 11 Table:11 Stat:NA loc:NA teacher:Sam"}
)
)
);
result = {};
For Each Row(dt,
res = Regex(:Column 1, "^(Class: \d+) (.*)?", "\2");
If(!IsMissing(res),
Insert Into(result, res);
);
);
show(result);
// result = {"Table:15 Stat:NA loc:NA teacher:Sam", "Table:11 Stat:NA loc:NA teacher:Sam"};Re : Rechercher chaque cellule d'une colonne pour trouver un contenu spécifiqueMerci @jthi . Cela fonctionne parfaitement pour l'exemple que j'ai fourni ci-dessus.
J'ai une question complémentaire, disons que nous avons la liste de chaînes suivante,
10 : Classe : A
11 : Classe : A1
12 : Classe : A2
..
20 ::Classe B
21 : Classe B1
22 : Classe B1
30 ::Classe C
31 : Classe C1
32 : Classe C2
Disons que je veux faire une liste pour chaque classe. Je veux que le premier soit ClassAList = (11::Class: A ,11::Class: A ,11::Class: A );
J'ai essayé de modifier regex() pour rechercher le premier chiffre d'une chaîne, puis de le déplacer dans la liste correspondante. J'ai utilisé quelque chose comme ceci : Regex("10:::Class" , "[1]")
Le problème ici est qu'il recherche [1] sur toute la chaîne. Est-il possible de sélectionner l'index dans lequel l'expression régulière doit rechercher une correspondance ?
L'autre problème ici est que renvoie 1 seulement, pas la chaîne entière.
Toute orientation est appréciée.
Re : Rechercher chaque cellule d'une colonne pour trouver un contenu spécifiqueCela pourrait donner une idée de ce que vous pourriez faire
Names Default To Here(1);
mylist = {"10::Class: A", "11::Class: A1", "12::Class: A2", "20::Class B", "21::Class B1",
"22::Class B1", "30::Class C", "31::Class C1", "32::Class C2"};
class_pattern = "\d+::(Class:? [A-Z])";
aa = Associative Array();
For Each({myitem}, mylist,
res = Regex(myitem, class_pattern, "\1");
If(!Contains(aa, res),
aa[res] = {};
);
Insert Into(aa[res], myitem);
);
show(aa);
https://regex101.com/r/itqqww/1 pour une explication du modèle regex
Re : Rechercher chaque cellule d'une colonne pour trouver un contenu spécifiqueMerci @jthi . Cela fonctionne parfaitement.
Question complémentaire :
Je voudrais regrouper la liste en sous-groupes basés uniquement sur le premier chiffre. J'ai essayé d'utiliser des ancres regex pour le faire. Cependant, au lieu de correspondre uniquement au premier chiffre, il correspond au premier et aux chiffres suivants. Toute orientation est appréciée.
Re : Rechercher chaque cellule d'une colonne pour trouver un contenu spécifiqueVous voulez dire la partie classe B1 ? Vous pouvez modifier l'expression régulière en ajoutant \d? entre parenthèses ( https://regex101.com/r/Yfh6pZ/1 ). \d correspondra à un chiffre et ? correspondra au jeton avant ZÉRO ou UNE fois. Si vous ne souhaitez pas capturer les groupes sans chiffres, laissez de côté ? ou remplacez-le par {1}

[
"Class B" => {"20::Class B"},
"Class B1" => {"21::Class B1", "22::Class B1"},
"Class C" => {"30::Class C"},
"Class C1" => {"31::Class C1"},
"Class C2" => {"32::Class C2"},
"Class: A" => {"10::Class: A"},
"Class: A1" => {"11::Class: A1"},
"Class: A2" => {"12::Class: A2"}
]