Encontrar valores en una listaSi tengo una lista:
Lista = {Henry(1,2), Robert(3,4), John( . ,6), Kai(13, . ) };
Pero la posición de los nombres siempre es diferente para diferentes tablas,
Lista = {Henry(1,2), Robert(3,4), Kai(13, . ), John( . ,6) };
ya veces también faltan ciertos nombres.
Lista = {Henry(1,2), Robert(3,4) };
Sé que podemos usar Contiene (Lista, Lista [1]) pero de esa manera, consideramos la posición de los valores en una lista. Quiero saber si hay alguna manera de buscar cadenas como "Henry" y extraer (1,2) para Henry, y guardar 1 como una variable y 2 como otra. Gracias
Re: Encontrar valores en una listaOye, gracias, lo hice funcionar usando expresiones regulares.@vince_faller
Re: Encontrar valores en una listaEsto debería hacer lo que quieras.
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);Re: Encontrar valores en una listaHola @Aam_jmp ,
seguimiento de @uday_guntupalli Sugerencia de usar expresiones regulares, aquí hay una secuencia de comandos simple que usa Contiene () que funcionará de manera similar y almacenará los valores en var1 y var2.La variable "encontrado" se usa para salir del bucle antes de tiempo si se encuentra el nombre, o imprimir un mensaje de que la cadena de búsqueda no se encontró en la lista al configurar var1 y var2 como perdidos.
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 = .;
)
);Re: Encontrar valores en una lista@Aam_jmp ,
Puede usar Regex para encontrar la cadena que desea. Su término de búsqueda debe construirse para cubrir un rango tan amplio como desee buscar y el poder de las expresiones regulares se desbloquea según lo bien que pueda construir su término de búsqueda.
El siguiente ejemplo cubre la búsqueda solo del término "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);
);
);