Combinare due stringheCiao,
Ho 2 colonne che contengono stringhe nel seguente formato:
stringa1 = 1.11;0;3;0;5
stringa2 = 0;2.2;0;4;0
Nota 1: entrambe le stringhe contengono lo stesso numero di ";" (ma non sono necessariamente della stessa lunghezza).
Nota 2: le due stringhe hanno 0 in posizioni alternate.
Voglio creare una nuova colonna (string3) che è il risultato dell'unione delle due colonne senza gli 0. Per l'esempio sopra: 1.11;2.2;3;4;5
Quindi la stringa3 dovrebbe avere lo stesso numero di ";" come stringa1 e stringa2 e deve contenere tutti i termini compresi tra ";" per ordine, senza 0.
C'è un modo per farlo usando solo le formule (senza script jsl)?
In alternativa, c'è un modo per farlo con jsl?
Vedere file allegato.
Grazie,
Yotam
Tabella datiScriptingRe: Combinare due cordeEcco una formula che funzionerà.Ho allegato una nuova tabella dati con una nuova colonna formula formula
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: Combinare due corde@DonMcCormack - Penso che questo potrebbe essere un grande problema di sfida.
- come rilevare e gestire gli errori nelle stringhe (non numeri, zeri non corrispondenti, lunghezza diversa)
- come renderlo veloce per il punto e virgola 1E6
modifica: utilizzo di JMP 16 Per ogni attraversamento ciclo continuo:
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: Combinare due cordeFantastico.
Grazie!
Re: Combinare due cordeGrazie!
Sfortunatamente al momento non ho ancora JMP16, ma questa soluzione sembra sicuramente molto elegante!
Re: Combinare due cordeMentre @txnelson e @Craige_Hales ti ha dato alcune opzioni interessanti e utili, se ho capito correttamente la tua situazione, può essere fatto in una formula senza cicli.
Ecco la formula con cui sono finito, prima come immagine e poi in JSL (che può essere incollata nell'editor delle formule).

If( !Is Missing( :string1 ) & !Is Missing( :string1 ),
string1list = Words( :string1, ";" );
string2list = Words( :string2, ";" );
Concat Items( string1list[Loc( string1list, "0" )] = string2list[Loc( string1list, "0" )], ";" );
,
""
)
Questo usa il Parole() funzione per convertire le stringhe in elenchi. Usa il Localizzazione() funzione per restituire una matrice di posizioni degli 0 in stringa1 e la utilizza come indice sia per stringa1elenco (a sinistra di un'assegnazione) che per stringa2elenco (a destra di tale assegnazione). Infine, il Articoli Concat() la funzione riconverte l'elenco in una stringa delimitata da punto e virgola.
Se qualcosa di tutto questo è fonte di confusione o non ha senso, fammelo sapere e ti spiegherò ulteriormente.