match 内で contains を使用する方法は?リスト A にテキストがあります。リスト A の値に基づいて別のリスト B を作成したいです。リスト A のテキストにリンゴが含まれている場合はリスト B が果物である必要があります。リスト A にトマトが含まれている場合はリスト B が野菜である必要があります。リスト A にデイジーが含まれている場合はリスト B が必要です。これらのどれも一致しない場合、リスト B は不明である必要があります。また、検索では大文字と小文字を区別する必要があります。
JMP の case ステートメントと同等のものを探しています。match() 関数を調べていますが、match 内に contains を使用するのに少し問題があります。
助けていただければ幸いです!
Re: match 内で contains を使用する方法は?このスクリプトを試してみてください。以前と同様に連想配列を使用しますが、今回は文字列内の文字列を含む検索を行います。したがって、 contains("applesauce", "apple") は一致するものを見つけます。
// 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 );
ログの結果は次のとおりです。
"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: match 内で contains を使用する方法は?- これは、listA というリストを調べ、文字列 apple が見つかった場合は、listB という単語、Fruit というリストに配置する非常に基本的なスクリプトです。
names default to here(1);
listA = {"Pear", "applesauce", "ham"};
listB = {};
If( contains(uppercase(char(listA)), uppercase("apple")), insert into(listB, "Fruit"));これはあなたが望んでいることではないと思います。
- 「リスト」というときは、JMP リストのことを言っているのですか、それとも何ですか?
- listB に配置すると言うとき、それは JMP リストですか、それとも単に長い文字列について話しているのですか。
Re: match 内で contains を使用する方法は?問題をうまく説明できていないかもしれません。私のリストAには、リンゴまたはハムが一部である可能性のある大きな文字列が含まれています。リストAの文字列にリンゴが含まれている場合、リストBに「果物」という文字列を書き込みたいと思います。
Re: match 内で contains を使用する方法は?食品項目リストに「アップルソース」や「ハンバーガー」などの単語が含まれる可能性があるため、contains ステートメントを使用したいと考えています。リストに「アップルソース」が含まれている場合、これに果物のタグを付けたいと考えています。
ありがとう
Re: match 内で contains を使用する方法は?ここでは、連想配列を使用してそれを行う方法を示します。
// 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: match 内で contains を使用する方法は?JSL には case ステートメントや関数はありません。 If() 関数または Match() 関数を使用する必要があります。 引数は網羅的である必要があり、既知のケースをすべて含めます。 以下に短い例を示します。
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 );
あなたの簡単な説明に基づいて、Contains() 関数がどのように適用されるのかわかりません。
[ item => kind ] ペアを含む連想配列を検索に使用することもできます。