Combinando dos cuerdasHola,
Tengo 2 columnas que contienen cadenas en el siguiente formato:
cadena1 = 1,11; 0; 3; 0; 5
cadena2 = 0; 2.2; 0; 4; 0
Nota 1: Ambas cadenas contienen el mismo número de ";" (pero no necesariamente tienen la misma longitud).
Nota 2: Las dos cadenas tienen ceros en posiciones alternas.
Quiero crear una nueva columna (cadena3) que es el resultado de fusionar las dos columnas sin los ceros. Para el ejemplo anterior: 1.11; 2.2; 3; 4; 5
Entonces, la cadena3 debería tener el mismo número de ";" como cadena1 y cadena2, y debe contener todos los términos entre ";" por orden, sin ceros.
¿Hay alguna manera de hacerlo usando solo fórmulas (sin scripting jsl)?
Alternativamente, ¿hay alguna manera de hacerlo con jsl?
Por favor, vea el archivo adjunto.
Gracias,
Yotam
Tabla de datosScriptingRe: combinar dos cuerdasAquí hay una fórmula que funcionará.He adjuntado una nueva tabla de datos con una nueva columna de fórmula.
w = 1;
newString = "";
While( Word( w, :string1, ";" ) != "",
If( newString != "",
newString = newString || ","
);
If( Word( w, :string1, ";" ) != "0",
newString = newString || Word( w, :string1, ";" ),
newString = newString || Word( w, :string2, ";" )
);
w++;
);
newString;
Re: combinar dos cuerdas@DonMcCormack - Creo que este podría ser un gran desafío.
- cómo detectar y tratar los errores en las cadenas (no números, ceros que no coinciden, no tienen la misma longitud)
- cómo hacerlo rápido para 1E6 punto y coma
editar: Usando el JMP 16 Para cada uno al otro lado círculo:
string1 = "1;0;2;0;0;8;0";
string2 = "0;1;0;3;5;0;13";
result = "";
For Each( {{w1, w2}, idx}, across( Words( string1, ";" ), Words( string2, ";" ) ),
result ||= (If( idx > 1, ",", "" ) || If( w1 == "0", w2, w1 ))
);
result;"1,1,2,3,5,8,13"
Re: combinar dos cuerdasFantástico.
¡Gracias!
Re: combinar dos cuerdas¡Gracias!
Desafortunadamente, todavía no tengo JMP16, ¡pero esta solución se ve muy elegante!
Re: combinar dos cuerdasTiempo @txnelson y @Craige_Hales le dio algunas opciones interesantes y útiles, si he entendido su situación correctamente, se puede hacer en una fórmula sin bucles.
Aquí está la fórmula con la que terminé, primero como una imagen y luego en JSL (que se puede pegar en el Editor de fórmulas).

If( !Is Missing( :string1 ) & !Is Missing( :string1 ),
string1list = Words( :string1, ";" );
string2list = Words( :string2, ";" );
Concat Items( string1list[Loc( string1list, "0" )] = string2list[Loc( string1list, "0" )], ";" );
,
""
)
Esto usa el Palabras() función para convertir sus cadenas en listas. Utiliza el Loc () función para devolver una matriz de ubicaciones de los 0 en string1 y lo usa como índice para string1list (en el lado izquierdo de una asignación) y string2list (en el lado derecho de esa asignación). Finalmente, el Elementos de Concat () La función vuelve a convertir la lista en una cadena delimitada por punto y coma.
Si algo de esto es confuso o no tiene sentido, avíseme y le explicaré más.