come usare contiene all'interno della partita?Ho del testo in una listaA. Voglio creare un'altra listaB in base al valore nella listaA.Se il testo della listaA contiene mela, la lista B dovrebbe essere frutta; se la lista A contiene pomodori, la listaB dovrebbe essere verdura; se la listaA ha margherite, la listaB dovrebbe essere fiore.Se nessuno di questi corrisponde, allora listB dovrebbe avere un valore sconosciuto.Inoltre la ricerca deve fare distinzione tra maiuscole e minuscole.
Alla ricerca di qualcosa di equivalente all'istruzione case in JMP. Sto esplorando la funzione match() ma ho qualche problema nell'usare contiene la corrispondenza interna.
qualsiasi aiuto apprezzato!
Re: come utilizzare contiene all'interno della partita?Prova questo script.Utilizza gli array associativi come prima, ma questa volta esegue una ricerca contiene per una stringa all'interno di una stringa.Quindi contiene("salsa di mele", "mela") troverà una corrispondenza.
// 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 );
Ecco i risultati 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: come utilizzare contiene all'interno della partita?- Ecco uno script molto semplice che esamina un elenco chiamato elenco A e, se trova la stringa mela, inserisce in un elenco chiamato elenco B, la parola Frutta.
names default to here(1);
listA = {"Pear", "applesauce", "ham"};
listB = {};
If( contains(uppercase(char(listA)), uppercase("apple")), insert into(listB, "Fruit"));Non penso che questo sia quello che vuoi.
- Quando dici "elenco" stai parlando di un elenco JMP o cosa?
- Quando dici posizionalo nell'elencoB, è un elenco JMP o stai solo parlando di una stringa lunga.
Re: come utilizzare contiene all'interno della partita?Forse non ho spiegato bene il problema. La mia lista A contiene una grande stringa di cui mela o prosciutto potrebbero far parte. Se la stringa nella lista A contiene mela, allora voglio scrivere una stringa chiamata "frutta" nella lista B.
Re: come utilizzare contiene all'interno della partita?Desidero utilizzare l'istruzione contiene perché l'elenco degli alimenti potrebbe contenere parole come "salsa di mele" o "hamburger". Se l'elenco contiene "salsa di mele", voglio contrassegnarlo come un frutto.
Grazie
Re: come utilizzare contiene all'interno della partita?Ecco un modo per farlo utilizzando un array associativo.
// 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: come utilizzare contiene all'interno della partita?Non esiste alcuna istruzione o funzione case in JSL. È necessario utilizzare la funzione If() o la funzione Match(). Le argomentazioni devono essere esaustive e includere tutti i casi noti. Ecco un breve esempio:
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 );
Non vedo come si applica la funzione Contiene() in base alla tua breve descrizione.
Potresti anche utilizzare un array associativo con le coppie [ item => kind ] per la ricerca.