Confusión al usar la función word() y el delimitador especificadoHola a todos,
Estoy tratando de manipular los nombres de mis columnas. Es muy fácil hacerlo una o dos veces con Buscar/Reemplazar, pero me gustaría programarlo.
Esencialmente, quiero cambiar el nombre de una columna de "Singletes/Leucocitos vivos/Linfocitos/Células B/A+B+C-, Frec. del padre" a " Células B/A+B+C-, Frec. de Padre”.
Aquí está mi código actual:
dt = Current Data Table ();
colList = dt << get column names(string);
For ( i = 1, i <= N Items(colList), i++,
If (
contains(colList[i], "Singlets/Live leukocytes/Lymphocytes/"), <BR />
Column(dt, colList[i]) << set name (Word(2, colList[i], "Lymphocytes/"))
));
Si ejecuto partes de este código individualmente, esto es lo que obtengo:
línea de código:
resultado en registro de secuencia de comandos
colList[i]:
"Singlets/Live leukocytes/Lymphocytes/B cells/A+B+C-,Freq. of Parent"
contains(colList[i], "Singlets/Live leukocytes/Lymphocytes/"):
1
Word(2, colList[i], "Lymphocytes/"):
"iv"
Word(3, colList[i], "Lymphocytes/"):
" l"
Word(4, colList[i], "Lymphocytes/"):
"uk"
Word(9, colList[i], "Lymphocytes/"):
"f Par"
Claramente, mi delimitador no funciona como esperaba. ¿Algunas ideas?
Originalmente traté de hacer Words(4, colList[i], "/") pero eso solo me dio "células B" ya que hay otro / inmediatamente después de eso. A diferencia de otros lenguajes de programación, no sé si hay una forma de especificar 'cuarta palabra y luego todo lo que sigue hasta el final' en JSL. No creo que esto sea posible, así que cambié el delimitador, pensando que eso resolvería mi problema.
¡¡Muchas gracias por cualquier consejo!!
Re: Confusión al usar la función word() y el delimitador especificado¡OH! Bien, ¡eso también hace que uno de los ejemplos en la guía de secuencias de comandos tenga MUCHO más sentido!
¡Terminé usando substr a mi favor! ¡Enviaré el código después del almuerzo!
Re: Confusión al usar la función word() y el delimitador especificadoUna confusión es que el argumento delimitador de la función PALABRAS significa dividir este texto si encuentra CUALQUIERA de estos caracteres.
Este enfoque puede acercarlo a lo que desea:
collist = {};
collist[1] = "Singlets/Live leukocytes/Lymphocytes/B cells/A+B+C-,Freq. of Parent";
collist[2] = "Singlets/Live leukocytes/Lymphocytes/Another Text";
collist[3] = "Singlets/Live leukocytes/Lymphocytes/Hello World";
remove_text = "Singlets/Live leukocytes/Lymphocytes/";
len_text = length(remove_text);
for (i = 1, i <= nitems(collist), i++,
start_pos = contains(colList[i], remove_text);
if (start_pos,
end_pos = start_pos + len_text;
new_name = substr(collist[i], end_pos);
show(new_name);
Column(dt, colList[i]) << set name (new_name);
);
);
Re: Confusión al usar la función word() y el delimitador especificadoEl delimitador es un carácter, no una cadena de caracteres.
También puede encontrar útiles las expresiones regulares en este problema.
Re: Confusión al usar la función word() y el delimitador especificadoUse N elementos (lista) para determinar cuántos niveles existen y tome los del final.
Re: Confusión al usar la función word() y el delimitador especificadoAdemás, ¿sabes por qué el código original no funciona?
Re: Confusión al usar la función word() y el delimitador especificado¿Qué sucede si tengo un número desigual de elementos de la lista? Este sería list[4]||" "||list[5] pero si tengo 6 elementos en mi lista y quiero que llegue hasta el final...
Estoy tratando de pseudocodificar algunos bucles for que recorren N elementos pero aún no lo he conseguido.
Re: Confusión al usar la función word() y el delimitador especificadoConsulte Ayuda > Índice de secuencias de comandos > Funciones > Carácter > Palabras
Re: Confusión al usar la función word() y el delimitador especificadoUtilice "/" para el delimitador. Además, utilice la función Words() en su lugar. Obtendrá una lista. A continuación, puede concatenar elementos de la lista. En este caso, la nueva cadena será list[5] || lista[5].
Bastante fácil, ¿eh?