comment utiliser le contenu dans le match ?J'ai du texte dans une listeA.Je souhaite créer une autre listeB basée sur la valeur de la listeA.Si le texte de la listeA contient une pomme, alors la liste B devrait être un fruit ; si la liste A contient des tomates, la listeB devrait être un légume ; si la listeA a une marguerite, la listeB devrait être une fleur. Si aucun de ces éléments ne correspond, alors listB devrait avoir un inconnu. La recherche doit également être insensible à la casse.
Je recherche quelque chose d'équivalent à l'instruction case dans JMP. J'explore la fonction match() mais j'ai un peu de mal à utiliser contain inside match.
toute aide appréciée!
Re : Comment utiliser le contenu dans la correspondance ?Essayez ce script.Utilise des tableaux associatifs comme auparavant, mais cette fois effectue une recherche contain pour une chaîne dans une chaîne.Ainsi, contain("applesauce", "apple") trouvera une correspondance.
// Create an associative array for the different types of food
food_aa = associative array();
food_aa["Fruit"] = {"apple", "pear", "banana", "plum"};
food_aa["Meat"] = {"ham", "chicken", "beef", "fish"};
food_aa["Flower"] = {"daisy", "sunflower", "aster", "peony"};
// List of foods to match up
food_items = List( "applesauce", "banana split", "hambone", "chicken", "daisyflower", "corvette" );
kind_of_food = {};
keylist = food_aa << get keys();
For( i = 1, i <= N Items( food_items), i++,
one_food = food_items[i];
for (k = 1, k <= nitems(keylist), k++,
one_key = keylist[k];
food_type_list = food_aa[one_key];
found_match = 0;
for (m = 1, m <= nitems(food_type_list), m++,
one_type_food = food_type_list[m];
if (contains(one_food, one_type_food),
insert into (kind_of_food, one_key);
print("Found match: " || one_key);
found_match = 1;
break(); // found a match - no need to keep looking at other foods
);
);
if (found_match, break()); // found a match - no need to keep looking for a food type
);
if (!found_match,
print("No match found for " || one_food)
);
);
Show( kind_of_food );
Voici les résultats du journal :
"Found match: Fruit"
"Found match: Fruit"
"Found match: Meat"
"Found match: Meat"
"Found match: Flower"
"No match found for corvette"
kind_of_food = {"Fruit", "Fruit", "Meat", "Meat", "Flower"};Re : Comment utiliser le contenu dans la correspondance ?- Voici un script très basique qui examine une liste appelée listA, et s'il trouve la chaîne apple, il la place dans une liste appelée listB, le mot Fruit.
names default to here(1);
listA = {"Pear", "applesauce", "ham"};
listB = {};
If( contains(uppercase(char(listA)), uppercase("apple")), insert into(listB, "Fruit"));Je ne pense pas que ce soit ce que tu veux.
- Quand vous dites « liste », vous parlez d'une liste JMP, ou quoi ?
- Lorsque vous dites de le placer dans la liste B, s'agit-il d'une liste JMP ou parlez-vous simplement d'une longue chaîne.
Re : Comment utiliser le contenu dans la correspondance ?Peut-être que je n'explique pas bien le problème.Ma listeA contient une grande chaîne dont la pomme ou le jambon peut faire partie.Si la chaîne de la listeA contient de la pomme, je veux écrire une chaîne appelée "fruit" dans la listeB.
Re : Comment utiliser le contenu dans la correspondance ?Je souhaite utiliser l'instruction contain car la liste des aliments peut contenir des mots tels que « compote de pommes » ou « hamburger ». Si la liste contient « compote de pommes », je souhaite l'étiqueter comme un fruit.
Merci
Re : Comment utiliser le contenu dans la correspondance ?Voici une façon de le faire en utilisant un tableau associatif.
// Create an associative array for the different types of food
food_aa = associative array();
food_aa["Fruit"] = {"apple", "pear", "banana", "plum"};
food_aa["Meat"] = {"ham", "chicken", "beef", "fish"};
food_aa["Flower"] = {"daisy", "sunflower", "aster", "peony"};
// List of foods to match up
food_item = List( "apple", "banana", "ham", "chicken", "daisy" );
kind_of_food = {};
For( i = 1, i <= N Items( food_item), i++,
if (contains(food_aa["Fruit"], food_item[i]),
insert into (kind_of_food, "fruit");
,
contains(food_aa["Meat"], food_item[i]),
insert into (kind_of_food, "meat");
,
contains(food_aa["Flower"], food_item[i]),
insert into (kind_of_food, "flower");
);
);
Show( kind_of_food );Re : Comment utiliser les contenus dans la correspondance ?Il n'y a pas d'instruction ou de fonction case dans JSL. Vous devez utiliser la fonction If() ou la fonction Match(). Les arguments doivent être exhaustifs – inclure tous les cas connus. Voici un court exemple :
Names Default to Here( 1 );
food item = List( "apple", "banana", "ham", "chicken" );
kind of food = List();
For( i = 1, i <= N Items( food item), i++,
Insert Into( kind of food,
Match( food item[i],
"apple", "fruit",
"banana", "fruit",
"ham", "meat",
"chicken", "meat",
"unknown"
);
);
);
Show( kind of food );
Je ne vois pas comment la fonction Contains() s'applique en fonction de votre brève description.
Vous pouvez également utiliser un tableau associatif avec des paires [ item => kind ] pour la recherche.