Búsqueda de una lista por un valorHola,
Tengo una lista que hice a partir de una cadena delimitada. Esa cadena se ve así: (número)|(nombre)|(número)|(nombre)|(número)... etc. Lo que he hecho es tomar esa cadena y analizarla mediante el delimitador ('|'). Luego tomé esa lista de todos los valores e hice una nueva lista de solo los "nombres" y creé nuevas columnas con ella. El problema con el que me he encontrado es cuando analizo la cadena y la coloco en cada columna. Porque no todas las cadenas en cada fila comienzan con el mismo valor. Tuve que obtener todos los "nombres" de dos filas de datos. Entonces, la primera fila, la tercera fila, la quinta fila, etc. deben ser iguales, pero el "nombre" en el que terminan sus cadenas es diferente. Posteriormente, cada segunda, cuarta, sexta, etc. filas comienzan con un "nombre" diferente (donde quedaron las filas impares). La lista de nombres que obtengo para hacer las columnas son todos los nombres que existen, pero quiero poder colocar todos los números en sus columnas correspondientes.
Parte del script que usé para analizar todos los datos es:
// Obtener todos los nombres de los pines
Lista = {};
lista = {};
lista2 = {};
// Iterar a través de las primeras filas de :Test_Result para obtener los nombres de los pines
lista = palabras(columna(dt4,"Test_Result")[1], "|");
lista2 = palabras(columna(dt4,"Test_Result")[2], "|");
// El primer valor en la cadena es información inútil, así que elimínelo
lista2 = Quitar(lista2,1);
one_test_result_list = concat(lista,lista2);
// Obtener todos los nombres de los pines que comienzan con el segundo valor
For(i = 1, i <= nitems(one_test_result_list)/2, i++,
Asignar (Lista , una_lista_de_resultados_de_prueba[i*2]);
);
No tengo ni idea de cómo hacer esto. Porque el "número" que sigue a cada "nombre" en la cadena es el valor que corresponde a ese nombre. Entonces, si veo ese nombre, necesito colocar el siguiente valor en la columna de ese nombre.
¡Muchísimas gracias por toda ayuda!
Re: Buscar en una lista por un valor<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Buen manejo de los nombres de las columnas que no se conocen de antemano.
Re: Buscar en una lista por un valordt = Nueva tabla ( "Ejemplo" , Agregar filas ( 4 ) ,
Nueva columna ( "Datos sin procesar" , Personaje , Nominal ,
Establecer valores (
{ "1|cara|3|Spock|4|Caballito de mar|5" , "1|cara|2|Shatner|3|Spock|5" ,
"1|cara|2|Shatner|3|Spock|4|Caballito de mar|5" ,
"1|Shatner|3|Spock|4|Caballito de mar|5" }
)
)
) ;
col_names = dt << obtener nombres de columna ( cadena ) ;
para ( i = 1 , i <= filas ( dt ) , i ++,
lista de palabras = palabras ( dt : datos sin procesar [ i ] , "|" ) ;
para ( k = 2 , k <= artículos ( lista de palabras ) , k = k + 2 ,
una_col = lista de palabras [ k ] ;
uno_num = lista de palabras [ k + 1 ] ;
si ( ! contiene ( col_names , una_col ) ,
dt << nueva columna ( una_col , personaje , nominal ) ;
insertar en ( col_names , una_col ) ;
) ;
columna ( dt , una_col )[ i ] = uno_num ;
) ;
) ;
Re: Buscar en una lista por un valor¡Gracias Craige! ¡Eso es exactamente lo que estoy buscando! ¡Funciona perfectamente!
Re: Buscar en una lista por un valorTampoco estoy seguro de estar respondiendo la pregunta correcta.Tal vez esto ayude:
dt = New Table( "Untitled",New Column( "dogs"),New Column( "cats"),New Column( "mice"),New Column( "horses"));
load = function({txt},
dt << addrow(1);
list=words(txt,"|");
for(i=1,i
columnName = list; i=i+1;
columnValue = list; i=i+1;
column(dt,columnName)[] = num(columnValue);
)
);
load("mice|3|horses|7");
load("cats|3|mice|9");

La línea 1 crea una tabla de datos de plantilla y supone que conoce todos los nombres de columna posibles.La línea 2 inicia una función de usuario que toma un solo argumento, txt.Las líneas 3 a 10 son la función: agregar una fila a la tabla, hacer una lista a partir del texto, revisar la lista de dos elementos a la vez, obtener un nombre, obtener un valor.La línea 8 crea una columna a partir del nombre de un carácter y usa el [ ] vacío para insertar un valor en la fila actual.Las líneas 11 y 12 son llamadas de ejemplo a la función.
Re: Buscar en una lista por un valor¡Eso está cerca! Ya tengo el código que analiza los datos y creo una nueva lista solo con los nombres. Lo que realmente busco es después de crear esas nuevas columnas, tengo que llenarlas con todos los números. Dado que el número que sigue a cada nombre es el valor de ese nombre, solo quiero buscar el nombre en la lista y colocar el siguiente valor en esa columna. Más o menos así:
(Asuma que estas son columnas): cara | Shatner | Spock | Caballo de mar
2 | 3 | 4 | 5
Como el primer número es inútil para mí, simplemente lo ignoro, pero los números que siguen al nombre son los valores que me importan. Pero supongamos que falta uno de esos valores:
calle = "1|Shatner|3|Spock|4|Caballito de mar|5" ;
Todavía tengo todas las columnas originales, pero en alguna fila de mi tabla de datos podría faltar algún valor en el medio o al principio, quiero que busque en la lista y omita los valores faltantes:
(Asuma que estas son columnas): cara | Shatner | Spock | Caballo de mar
| 3 | 4 | 5
No estoy seguro de cuán posible es esto, pero no todas las filas comienzan con el mismo valor. Pero debería tener todos los valores después de encontrar el primero. Entonces, todo lo que realmente necesito es encontrar a qué columna pertenece el primer valor y luego completar todas las columnas después de eso.
¡Gracias!
Re: Buscar en una lista por un valorNo estoy seguro de entenderte, pero parece que solo quieres hacer esto.
calle = "1|'cara'|2|Shatner|3|Spock|4|Caballito de mar" ;
lista = palabras ( calle , "|" ) ;
norte = artículos ( lista ) / 2 ;
índice = 1 :: norte ;
iguala = índice * 2 ;
nombres = lista [ iguala ] ;
¿O posiblemente matrices asociativas?