Re: ¿Cómo determinar si una cadena tiene caracteres duplicados y extraerlos?Aquí hay una forma de deshacerse de los duplicados.
theList = Words( "abp-g5.GAIV_0099_P013_GAIV_0099_P013", "_." );
For( i = N Items( theList ), i >= 1, i--,
If( N Rows( Loc( theList, theList[i] ) ) > 1,
Remove From( theList, i, 1 )
)
);
newName = theList[1] || "." || theList[2];
For( i = 3, i <= N Items( theList ), i++,
newName = newName || "_" || theList[i]
);
Re: ¿Cómo determinar si una cadena tiene caracteres duplicados y extraerlos?Pocas preguntas:
- ¿Qué consideras una "palabra"? ¿Algo separado por "_" y "."?
- ¿Qué haces si hay múltiples duplicados? ¿Se extraen todos/solo los más cortos/solo los más largos/ninguno?
- ¿Puede ocurrir la duplicación en cualquier punto de la cadena? ¿La parte duplicada siempre está al final?
Re: ¿Cómo determinar si una cadena tiene caracteres duplicados y extraerlos?Gracias, tu método es muy bueno!
Re: ¿Cómo determinar si una cadena tiene caracteres duplicados y extraerlos?Gracias, de hecho, este es un problema práctico::
Siempre que haya un GAI en este carácter, extraiga uno de los caracteres que empiecen por él siempre que aparezca repetido, sin importar cuántas veces aparezca.
Y definitivamente habrá duplicados.
Re: ¿Cómo determinar si una cadena tiene caracteres duplicados y extraerlos?Esta es una pregunta interesante. Me gusta @txnelson la solución de . Además de su enfoque, esta es una situación en la que las expresiones regulares pueden ser útiles, así que aquí hay otra forma de hacerlo.
Los dos ejemplos proporcionados tienen los siguientes patrones:
- un prefijo puede estar presente, por ejemplo, "abp-g5".
- la cadena/los caracteres deseados siguen al prefijo
- los caracteres repetidos/duplicados coinciden exactamente con la cadena/los caracteres deseados
- los caracteres repetidos/duplicados están separados de los caracteres deseados por un guión bajo
- no hay nada más que caracteres duplicados al final de la cadena
- hay al menos una cadena/caracteres repetidos/duplicados presentes
Suponiendo que estas reglas definan con precisión los nombres de las columnas que deben cambiarse, el siguiente código actualizará todos los nombres de las columnas en la "tabla de datos actual" que coincidan con las suposiciones anteriores. Los nombres de las columnas que no coincidan con los supuestos no se cambiarán.
names default to here(1);
dt = current data table();
for( k = 1, k <= n cols(dt), k++,
colName = column(dt, k) << get name();
colName = regex( colName, "^.*?(.+)(?:_\1)+$", "\1" );
try( column(dt, k) << set name( colName ) );
);
¿Cómo determinar si una cadena tiene caracteres duplicados y extraerlos?Ahora tengo una tabla con más de 1000 columnas y la mayoría de los nombres de las columnas tienen palabras duplicadas que deben extraerse. Pregúntele a los grandes, ¿cómo lograr esto con JSL?
Por ejemplo:
el nombre de la columna es abp-g5.GAIV_0099_P013_GAIV_0099_P013, luego extraiga GAIV_0099_P013;
El nombre de la columna es abp-g5.GAI1997_GAI1997, luego extraiga GAI1997
Automatización y secuencias de comandosMac OSLa personalización en masa