Columna delimitada de búsqueda para valores en lista<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hola gente JMP,
A menudo uso contiene para buscar en una columna cualquier valor en una lista. Algo como esto:
match_list = { "AAA" , "CCC" } ;
single_rows = dt << obtener filas donde ( contiene ( match_list , : Valor único )) ;
Esta es una forma muy conveniente de buscar una columna que contenga valores individuales. Sin embargo, muchas veces necesito hacer una búsqueda similar en la que la columna contenga varios valores separados por un delimitador (generalmente un punto y coma).

Mi pregunta: ¿existe una forma sencilla de buscar una columna de valores delimitados de manera similar al método descrito anteriormente? Puedo usar expresiones regulares para buscar un solo valor en la columna de valores múltiples. Sin embargo, necesito buscar en la columna de valores múltiples para muchos valores contenidos en una lista.
Aquí hay algo de código que genera la tabla anterior y muestra el método contiene en una columna de un solo valor.
dt = Nueva mesa ( "Busqueda" , Añadir filas ( 6 ) ,
Nueva Columna ( "Valor único" , Personaje , Nominal ,
Establecer valores ( { "AAA" , "BBB" , "CCC" , "DDD" , "EEE" , "FFF" } ) ) ,
Nueva Columna ( "Valor delimitado" , Personaje , Nominal ,
Establecer valores ( { "AAA" , "AAA; BBB; CCC; DDD; EEE" , "BBB; CCC; DDD" , "BBB; DDD; EEE; AAA" ,
"BBB; EEE" , "FFF; BBB" } )
)
) ;
match_list = { "AAA" , "CCC" } ;
single_rows = dt << obtener filas donde ( contiene ( match_list , : Valor único )) ;
Re: Buscar columna delimitada para valores en listaSi no tiene los Nitems, creo que << obtiene filas donde () buscará un booleano y en su lugar obtendrá una lista. Con los nítems, si no hay intersecciones, no habrá nada en la lista, tan falso.
Re: Buscar columna delimitada para valores en listaWow Vince eso es fabuloso. Hice algunas modificaciones y se me ocurrió una función que toma mucho de este post de MS: Re: forma rápida de comparar dos listas (elementos poco comunes)?
Aquí hay un código de ejemplo. Resulta que no necesitas la construcción [row ()]. Pero, ¿por qué necesitas nitems?
list_intersect = función ( // ve que elementos de list_1 están en list_2
{ list_1 , list_2 } ,
{ LOCAL POR DEFECTO } ,
intersect_list = Matriz asociativa ( list_1 ) << intersecarse ( Matriz asociativa ( list_2 ) ) << Getkeys ;
) ;
lista1 = { "manzana" , "Pera" , "naranja" , "kiwi" , "sandía" , "mango" , "limón" , "pera bosc" } ;
lista2 = { "manzana" , "Pera" , "kiwi" , "naranja" , "fresa" , "sandía" , "melón" } ;
dt = Nueva mesa ( "temperatura" ,
Nueva Columna ( "Fruta" , personaje , valores de seteo ( lista1 || lista2 ) )
) ;
list1_rows = dt << Obtener filas donde ( Nitems ( list_intersect ( Palabras ( : Fruta , ";" ) , lista1 ))) ;
list2_rows = dt << Obtener filas donde ( Nitems ( list_intersect ( Palabras ( : Fruta , ";" ) , lista2 ))) ;
Re: Buscar columna delimitada para valores en listaTuve que crear una función para hacerlo. pero esto parece funcionar
list_doge = función ( // ve que elementos de list_1 están en list_2
{list_1, list_2}, {LOCAL POR DEFECTO},
aa1 = matriz asociativa (list_1);
aa2 = matriz asociativa (list_2);
aa1 << intersecarse (aa2);
aa1 << conseguir llaves ;
);
dt << Obtener filas donde ( Nitems (list_doge ( Palabras (: Valor delimitado [ fila ()], ";" ), match_list)))