Wie verwende ich „Contains“ innerhalb von Match?Ich habe etwas Text in einer ListeA. Ich möchte eine weitere ListeB basierend auf dem Wert in ListeA erstellen. Wenn der Text von ListeA Apfel enthält, sollte Liste B Obst sein; wenn Liste A Tomate enthält, sollte ListeB Gemüse sein; wenn ListeA Gänseblümchen enthält, sollte ListeB sein Sei eine Blume. Wenn keines davon übereinstimmt, sollte listB „unknown“ enthalten. Außerdem muss bei der Suche die Groß-/Kleinschreibung nicht beachtet werden.
Ich suche nach etwas, das der case-Anweisung in JMP entspricht. Ich untersuche gerade die Funktion match(), habe aber ein wenig Probleme bei der Verwendung von Includes innerhalb von match.
Jede Hilfe wird geschätzt!
Betreff: Wie verwende ich „Contains“ innerhalb eines Matches?Probieren Sie dieses Skript aus.Verwendet assoziative Arrays wie zuvor, führt dieses Mal jedoch eine enthält-Suche nach einer Zeichenfolge innerhalb einer Zeichenfolge durch.Also findet contains("applesauce", "apple") eine Übereinstimmung.
// 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 );
Hier sind die Ergebnisse aus dem Protokoll:
"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"};Betreff: Wie verwende ich „Contains“ innerhalb eines Matches?- Hier ist ein sehr einfaches Skript, das eine Liste namens listA durchsucht und, wenn es die Zeichenfolge apple findet, das Wort Fruit in eine Liste namens listB einfügt.
names default to here(1);
listA = {"Pear", "applesauce", "ham"};
listB = {};
If( contains(uppercase(char(listA)), uppercase("apple")), insert into(listB, "Fruit"));Ich glaube nicht, dass Sie das wollen.
- Wenn Sie „Liste“ sagen, meinen Sie damit eine JMP-Liste, oder was?
- Wenn Sie „in Liste B einfügen“ sagen, handelt es sich dabei um eine JMP-Liste oder sprechen Sie nur von einer langen Zeichenfolge?
Betreff: Wie verwende ich „Contains“ innerhalb eines Matches?Vielleicht erkläre ich das Problem nicht gut. Meine Liste A enthält eine große Zeichenfolge, zu der Apfel oder Schinken gehören können. Wenn die Zeichenfolge in Liste A Apfel enthält, möchte ich in Liste B eine Zeichenfolge mit dem Namen „Frucht“ schreiben.
Betreff: Wie verwende ich „Contains“ innerhalb eines Matches?Ich möchte die Anweisung „enthält“ verwenden, da die Lebensmittelliste möglicherweise Wörter wie „Apfelmus“ oder „Hamburger“ enthält. Wenn die Liste „Apfelmus“ enthält, möchte ich dies als Frucht kennzeichnen.
Danke
Betreff: Wie verwende ich „Contains“ innerhalb eines Matches?Hier ist eine Möglichkeit, dies mithilfe eines assoziativen Arrays zu tun.
// 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 );Betreff: Wie verwende ich „Contains“ innerhalb eines Matches?In JSL gibt es keine case-Anweisung oder Funktion. Sie müssen die Funktion If() oder die Funktion Match() verwenden. Die Argumente müssen erschöpfend sein und alle bekannten Fälle umfassen. Hier ein kurzes Beispiel:
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 );
Ich sehe aufgrund Ihrer kurzen Beschreibung nicht, wie die Funktion „Contains()“ funktioniert.
Sie können zum Nachschlagen auch ein assoziatives Array mit [item => kind]-Paaren verwenden.