Ricerca di valori in un elencoSe ho una lista:
Lista = {Henry(1,2), Robert(3,4), John( . ,6), Kai(13, . ) };
Ma la posizione dei nomi è sempre diversa per tabelle diverse,
Lista = {Henry(1,2), Robert(3,4), Kai(13, . ), John( . ,6) };
e talvolta mancano anche alcuni nomi.
Lista = {Enrico(1,2), Roberto(3,4) };
So che possiamo usare Contains(List, List[1]) ma in questo modo consideriamo la posizione dei valori in un elenco. Voglio sapere se esiste un modo per cercare stringhe come "Henry" ed estrarre (1,2) per Henry e salvare 1 come una variabile e 2 come un'altra. Grazie
Ri: Trovare valori in una listaEhi, grazie, l'ho fatto funzionare usando regex però.@vince_faller
Ri: Trovare valori in una listaQuesto dovrebbe fare quello che vuoi.
Names Default to here(1);
Extract Expr({Henry(1,2), Robert(3,4), John( . ,6), Kai(13, . ) }, Henry(Wild(), Wild()));
//or for a more complete answer
l = {Henry(1,2), Robert(3,4), John( . ,6), Kai(13, . ) };
extracted = Eval(Substitute(
Expr(
Extract Expr(DV_LIST, Henry(WildList()));
),
Expr(DV_LIST), nameexpr(l)
));
first = Arg(extracted, 1);
second = Arg(extracted, 2);Ri: Trovare valori in una listaCIAO @Aam_jmp ,
In seguito @uday_guntupalli di utilizzare le espressioni regolari, ecco un semplice script che utilizza Contains() che funzionerà in modo simile e memorizzerà i valori in var1 e var2.La variabile "trovato" viene utilizzata per uscire dal ciclo in anticipo se il nome viene trovato, o stampare un messaggio che la stringa di ricerca non è stata trovata nell'elenco durante l'impostazione di var1 e var2 su missing.
search_str = "Henry";
found = 0;
for(i = 1, i <= N Items(MyList), i++,
temp = char(MyList[i]);
If(Contains(temp,search_str) > 0,
var1 = num(word(2,temp,"(),"));
var2 = num(word(3,temp,"(),"));
found = 1;
);
if(found, break());
if(i == N Items(MyList) & !found,
Print("Search term not found in the list.");
var1 = .;
var2 = .;
)
);Ri: Trovare valori in una lista@Aam_jmp ,
Puoi usare Regex per trovare la stringa che desideri. Il tuo termine di ricerca deve essere costruito per coprire una gamma ampia quanto desideri cercare e il potere delle espressioni regolari viene sbloccato dal modo in cui riesci a costruire il tuo termine di ricerca.
L'esempio seguente copre la ricerca solo per il termine "Henry"
Clear Log(); Clear Globals();
MyList = List = {Henry(1,2), Robert(3,4), John( . ,6), Kai(13, . ) };
SelInd = {};
for(i = 1, i <= N Items(MyList), i++,
If(!IsMissing(Regex(Char(MyList[i]),"Henry")),
Insert Into(SelInd,i);
);
);