¿Cómo usar contiene dentro del partido?Tengo un texto en una lista A. Quiero crear otra lista B basada en el valor de la lista A. Si el texto de la lista A contiene manzana, entonces la lista B debería ser fruta; si la lista A tiene tomate, la lista B debería ser vegetal; si la lista A tiene margaritas, la lista B debería ser flor. Si ninguno de estos coincide, listB debería ser desconocido. Además, la búsqueda debe distinguir entre mayúsculas y minúsculas.
Estoy buscando algo equivalente a la declaración de caso en JMP. Estoy explorando la función match () pero tengo algunos problemas para usar la coincidencia interna.
cualquier ayuda apreciada!
Re: ¿Cómo usar contiene dentro del partido?Prueba este guión.Utiliza matrices asociativas como antes, pero esta vez contiene una búsqueda de una cadena dentro de una cadena.Así que contains("puré de manzana", "manzana") encontrará una coincidencia.
// 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 );
Estos son los resultados del registro:
"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: ¿Cómo usar contiene dentro del partido?- Aquí hay un script muy básico que busca en una lista llamada listaA, y si encuentra la cadena manzana, coloca en una lista llamada listaB, la palabra Fruta.
names default to here(1);
listA = {"Pear", "applesauce", "ham"};
listB = {};
If( contains(uppercase(char(listA)), uppercase("apple")), insert into(listB, "Fruit"));No creo que esto sea lo que quieres.
- Cuando dices "lista", ¿estás hablando de una lista JMP, o qué?
- Cuando dice colocarlo en listB, es una lista JMP, o simplemente está hablando de una cadena larga.
Re: ¿Cómo usar contiene dentro del partido?Puede ser que no explique bien el problema. Mi lista A contiene una cadena grande de la cual manzana o jamón pueden ser una parte. Si la cadena en lista A contiene manzana, entonces quiero escribir una cadena llamada "fruta" en lista B.
Re: ¿Cómo usar contiene dentro del partido?Quiero usar la declaración contiene porque la lista de alimentos puede tener palabras como "puré de manzana" o "hamburguesa". Si la lista contiene "puré de manzana", entonces quiero etiquetarlo como una fruta.
Gracias
Re: ¿Cómo usar contiene dentro del partido?Aquí hay una manera de hacerlo usando una matriz asociativa.
// 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: ¿Cómo usar contiene dentro del partido?No hay declaración de caso o función en JSL. Debe utilizar la función If() o la función Match(). Los argumentos deben ser exhaustivos: incluir todos los casos conocidos. Aquí hay un breve ejemplo:
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 );
No veo cómo se aplica la función Contiene () según su breve descripción.
También puede usar una matriz asociativa con pares [item => kind] para buscar.