
Trova e sostituisci semplice
Il linguaggio di scripting di JMP, JSL, può memorizzare numeri, stringhe e altri oggetti in variabili. Un'assegnazione di stringa potrebbe assomigliare a questa:
place = "Cary, North Carolina, USA";
la variabile posto ora tiene la corda. Ecco una serie di funzioni per lavorare con le stringhe in JSL.Posto manterrà la stessa stringa in tutti gli esempi. Regex e Pattern Matching verranno trattati nei post successivi.
Concatenazione - Metti insieme due stringhe, un'estremità all'altra. O più di due...
sentence = "My home is " || place || ".";
"La mia casa è Cary, North Carolina, USA."
Lunghezza - quanti caratteri ci sono nella stringa?
Write( place, " ", Length( place ) );
Cary, Carolina del Nord, Stati Uniti 25
Contiene - quale parte della stringa contiene questo testo?
positionA = Contains( place, "," );
positionB = Contains( place, ",", 1 + positionA );
Show( positionA, positionB );
posizioneA = 5;
posizioneB = 21;
Notare come la posizioneB viene trovata iniziando un carattere dopo la posizioneA. Altrimenti la prima virgola nella posizione A verrebbe ritrovata. Contiene restituisce una posizione pari a 0 se la ricerca fallisce, rendendo se(contiene(...), ...) funzionare bene.
Sottostr - parte della corda, a partire da una posizione, per una lunghezza.
state = Substr( place, 1 + positionA, positionB - (1 + positionA) );
" Carolina del Nord"
Notare che è stato catturato anche lo spazio dopo la prima virgola. Se tralasci l'argomento lunghezza, substr va alla fine. Esiste anche una regola per una posizione iniziale negativa:
Substr( place, -3, 2 );
"NOI"
-3 significa iniziare 3 caratteri dalla fine.
Ordinare - rimuovi quei fastidiosi spazi vuoti
state = trim( state, "left" ); // or "right" or "both"
"Carolina del Nord"
Sinistra - un certo numero di caratteri dall'estremità sinistra (anteriore) della stringa
Left( place, positionA - 1 );
"Cary"
positionA è 5, la posizione della prima virgola; "Cary" sono i 4 caratteri prima della virgola. Esiste un terzo argomento per il testo di riempimento:
Left( "abc", 15, "@#$*" );<BR />
"abc@#$*@#$*@#$*"
Notare come viene aggiunta una quantità sufficiente di testo di riempimento per fornire i 15 caratteri richiesti dalla sinistra di "abc". Lo spazio potrebbe essere una scelta di riempimento migliore. Senza il riempitivo il risultato è solo "abc".
Giusto - un certo numero di caratteri dall'estremità destra (posteriore) della stringa
Right( place, 3 ); // like Left, there is a fill option
"STATI UNITI D'AMERICA"
Usa Substr invece di right se hai una posizione
Substr( place, positionB + 2 ); // +2 goes past the comma and the space
"STATI UNITI D'AMERICA"
Substr non richiede un terzo valore per la lunghezza; andrà fino alla fine.
Voi Potevo usa Right con una posizione e la funzione Lunghezza, ma quando avrai spiegato come sottrarre una posizione da una lunghezza, sarà più complicato.
Munger - tuttofare...
Munger munges cerca e sostituisce insieme. Non è così intelligente o conosciuto come Regex, ma è più facile da capire, una volta capito come funziona. Nessun altro sarà in grado di capire cosa sta facendo il tuo JSL senza un manuale, quindi potresti voler saltarlo.
result = Munger( source, startPosition, textOrLength, optionalReplacementText );
Ecco una tabella che tenta di spiegare le varie combinazioni di textOrLength e optionalReplacementText. Tutti gli esempi utilizzano 3 come posizione iniziale, saltando l'iniziale "ab". Notare il quarto esempio in cui viene trovata la seconda "b".
| |
nessuna sostituzione |
testo sostitutivo = "$*?" |
| Munger("abcabc", 3, 2, ? ) |
"circa" |
"ab$*?bc" |
| Munger("abcabc", 3, 0, ?) |
"" |
"ab$*?cabc" |
| Munger("abcabc", 3, 99, ?) |
"cabine" |
"ab$*?" |
| |
|
|
| Munger("abcabc", 3, "b", ?) |
5 |
"abca$*?c" |
| Munger("abcabc", 3, "Q", ?) |
0 |
"abcabc" |
| Munger("abcabc", 3, "", ?) |
0 |
"abcabc" |
Se lo guardi abbastanza a lungo, tutti i risultati lo sono utile in modo autoconsistente. Se non c'è testo da trovare, solo una lunghezza, Munger restituisce la sottostringa. Se c'è del testo sostitutivo, restituisce l'originale con la sottostringa sostituita. Ma se c'è del testo da trovare non c'è motivo di restituire il testo trovato, quindi se non c'è testo sostitutivo otterrai la posizione del testo trovato. Se è presente testo sostitutivo, otterrai la stringa originale con la sottostringa sostituita. Il caso strano è l'ultima riga, che potrebbe o meno soddisfare le tue aspettative di trovare una stringa vuota. Non utilizzare nemmeno posizioni e lunghezze negative. Non aggiungeranno alcuna chiarezza qui e non funzioneranno come substr().
Esempio
Le formule delle colonne della tabella dati possono calcolare un valore da un'altra colonna. Ecco un esempio di "cognome, nome" che presuppone che la virgola sia un delimitatore univoco. Questo esempio funziona per il caso "onlyname" a causa del modo in cui Left interpreta qualsiasi lunghezza fuori intervallo come tutto. Cerca il post Regex, potrebbe piacerti di più.
Column formula using Left() and Contains()Column formula using Left() and Contains()Column formula using Left() and Contains()Column formula using Left() and Contains()Column formula using Left() and Contains()Formula di colonna utilizzando Left() e Contiene()
Column formula using substr() and contains()Column formula using substr() and contains()Column formula using substr() and contains()Column formula using substr() and contains()Column formula using substr() and contains()Formula di colonna utilizzando substr() e contiene()
modifica 30 settembre 2017: ripara la formattazione