Vai al contenuto
PLC Forum

Partecipa anche tu alla Live su Youtube martedì 28/01/2025 per festeggiare i 24 anni di PLC Forum

Per ulteriori informazioni leggi questa discussione: https://www.plcforum.it/f/topic/326513-28012025




Elimina spazi iniziali e finali di una stringa


Messaggi consigliati

Inserito:

Buongiorno ho una stringa del tipo '   S C-KT03486   ' , in pratica dovrei togliere gli spazi iniziali e finali della stringa e dovrei ottenere 

'S C-KT03486', OVVIAMENTE devo togliere gli eventuali spazi iniziali e finali della stringa, ma quelli tra un carattere ed un'altro no. Ovviamente operazione eseguita con codice scl.

Grazie mille a chi mi può aiutare. 


dina_supertramp
Inserita:

Togliere spazi all'inizio:

Utilizza l'istruzione che legge il primo carattere a sinistra (LEFT) e confronta se il carattere è uguale a spazio vuoto ' '.
Se il confronto è valido, cancella il primo carattere (DELETE).
Itera.
Se il confronto non è più valido, significa che ha trovato il primo carattere non vuoto della stringa.
 

Togliere spazi alla fine:
Utilizza l'istruzione che ti dice quanto è attualmente lunga a stringa (LEN, da non confondere con MAX_LEN)

Utilizza l'istruzione che legge l'ultimo carattere a destra (RIGHT) e confronta se il carattere è uguale a spazio vuoto ' '.
Se il confronto è valido, cancella l'ultimo carattere (DELETE). Sai quanto è lunga la scritta (istruzione LEN precedente), ergo sai qual è l'ultimo carattere, cioè quello a cui puntare con il delete.

Itera.
Se il confronto non è più valido, significa che hai cancellato tutti gli spazi vuoti alla fine.
 

 

Inserita:
22 minuti fa, dina_supertramp ha scritto:

Togliere spazi all'inizio:

Utilizza l'istruzione che legge il primo carattere a sinistra (LEFT) e confronta se il carattere è uguale a spazio vuoto ' '.
Se il confronto è valido, cancella il primo carattere (DELETE).
Itera.
Se il confronto non è più valido, significa che ha trovato il primo carattere non vuoto della stringa.
 

Togliere spazi alla fine:
Utilizza l'istruzione che ti dice quanto è attualmente lunga a stringa (LEN, da non confondere con MAX_LEN)

Utilizza l'istruzione che legge l'ultimo carattere a destra (RIGHT) e confronta se il carattere è uguale a spazio vuoto ' '.
Se il confronto è valido, cancella l'ultimo carattere (DELETE). Sai quanto è lunga la scritta (istruzione LEN precedente), ergo sai qual è l'ultimo carattere, cioè quello a cui puntare con il delete.

Itera.
Se il confronto non è più valido, significa che hai cancellato tutti gli spazi vuoti alla fine.
 

 

Grazie mille per la risposta tempestiva, così facendo cancella un solo spazio iniziale o finale, o eventualmente più spazi iniziali e più spazi finali? 

dina_supertramp
Inserita: (modificato)

La prima operazione, che cancella il primo carattere della stringa (delete che punta al char 1), sarà all'interno di un IF che verifica che il carattere più a sinistra è uguale a spazio vuoto.

IF
    carattere a sinistra = vuoto
THEN
    cancella carattere all posizione 1
ELSE
;
END_IF;

 

La seconda operazione, che cancella l'ultimo carattere della stringa (delete che punta all'ultimo char), sarà all'interno di un IF che verifica che l'ultimo carattere è uguale a spazio vuoto.


LEGGI LUNGHEZZA STRINGA e restituisci il valore in una variabile INT "LunghezzaAttualeStringa"

 

IF
    carattere a destra = vuoto
THEN
    cancella carattere alla posizione "LunghezzaAttualeStringa"
ELSE
;
END_IF;

Al primo ciclo: entra nell'IF, che è verificato, cancella il carattere vuoto
Al secondo ciclo: entra nell'IF, che è verificato, cancella il carattere vuoto

Al n-ciclo: non entra nell'IF perché non è verificato, entra nell'ELSE, non fa nulla ( ; ).
Quindi, per rispondere alla tua domanda: cancella spazi vuoti all'inizio e alla fine finché ne trova 🙂

 

Modificato: da dina_supertramp
Inserita: (modificato)

Ricordi male o c'è anche la TRIM ?

 

mi correggo... c'è ma a livello script nel pannello....

Modificato: da drn5
Inserita:

Anch'io ho sempre fatto due for per annullare gli spazi, c'è anche un funzione che trovi in rete da caricare se non vuoi farla tu.

Gli si da in ingresso e in uscita della stringa da trimmerare.

Inserita:
2 minuti fa, max.bocca ha scritto:

Anch'io ho sempre fatto due for per annullare gli spazi, c'è anche un funzione che trovi in rete da caricare se non vuoi farla tu.

Gli si da in ingresso e in uscita della stringa da trimmerare.

Puoi gentilmente postare il link....?

 

Inserita:

qui la funzione scritta in modo semplice semplice.

 

image.thumb.png.2220443f9b29b957e632181546453d79.png

Inserita:
34 minuti fa, drn5 ha scritto:

qui la funzione scritta in modo semplice semplice.

 

image.thumb.png.2220443f9b29b957e632181546453d79.png

Grazie mille  drn5, davvero gentilissimo stasera provo e ti aggiorno. Grazie ancora buona serata.

Inserita:
15 ore fa, drn5 ha scritto:

qui la funzione scritta in modo semplice semplice.

 

image.thumb.png.2220443f9b29b957e632181546453d79.png

Grazie mille  drn5, davvero gentilissimo stasera provo e ti aggiorno. Grazie ancora buona serata.

Grazie mille drn5 il codice funziona perfettamente,  sei stato proprio gentilissimo, grazie ancora  buona giornata 

Inserita:

Ovviamente ringrazio tutto per le info e per il tempo dedicatomi. Grazie e buona giornata a tutti

Inserita:
20 ore fa, dina_supertramp ha scritto:

La prima operazione, che cancella il primo carattere della stringa (delete che punta al char 1), sarà all'interno di un IF che verifica che il carattere più a sinistra è uguale a spazio vuoto.

IF
    carattere a sinistra = vuoto
THEN
    cancella carattere all posizione 1
ELSE
;
END_IF;

 

La seconda operazione, che cancella l'ultimo carattere della stringa (delete che punta all'ultimo char), sarà all'interno di un IF che verifica che l'ultimo carattere è uguale a spazio vuoto.


LEGGI LUNGHEZZA STRINGA e restituisci il valore in una variabile INT "LunghezzaAttualeStringa"

 

IF
    carattere a destra = vuoto
THEN
    cancella carattere alla posizione "LunghezzaAttualeStringa"
ELSE
;
END_IF;

Al primo ciclo: entra nell'IF, che è verificato, cancella il carattere vuoto
Al secondo ciclo: entra nell'IF, che è verificato, cancella il carattere vuoto

Al n-ciclo: non entra nell'IF perché non è verificato, entra nell'ELSE, non fa nulla ( ; ).
Quindi, per rispondere alla tua domanda: cancella spazi vuoti all'inizio e alla fine finché ne trova 🙂

 

Ciao, ho provato anche a realizzare il codice con la tia soluzione,  però mi toglie un eventuale spazio finale o iniziale, ma se sono più di uno spazio, mi toglie sempre uno, forse sbaglio qualcosa........?

dina_supertramp
Inserita: (modificato)
6 ore fa, Project75 ha scritto:

Ciao, ho provato anche a realizzare il codice con la tia soluzione,  però mi toglie un eventuale spazio finale o iniziale, ma se sono più di uno spazio, mi toglie sempre uno, forse sbaglio qualcosa........?

Ciao @Project75

 

Stamattina avevo un po' di tempo, ho preso il blocchetto che feci a suo tempo, sulla falsa riga delle indicazioni che ti ho dato nei messaggi precedenti,

e l'ho rivisto snellendolo un poco (ho racchiuso tutto in un solo FOR, non utilizzo più le istruzioni LEFT/RIGHT ma uso solo il FIND oltre che LEN e DELETE).

In merito alla tua prova: non ti faceva la ripetizione perché quello che ti ho scritto andava inserito in cicli FOR che non ho espressamente indicato.

Ti allego il blocchetto.

Funzionamento: Cerca un singolo carattere e lo elimina, per tutte le volte che viene trovato.


PS
Indentazione da migliorare....😁

 

image.thumb.png.0e9913ab82ed2ffe2e59ddbb7fbe2cc3.png

 

 

Modificato: da dina_supertramp
Inserita:
30 minuti fa, dina_supertramp ha scritto:

Ciao @Project75

 

Stamattina avevo un po' di tempo, ho preso il blocchetto che feci a suo tempo, sulla falsa riga delle indicazioni che ti ho dato nei messaggi precedenti,

e l'ho rivisto snellendolo un poco (ho racchiuso tutto in un solo FOR, non utilizzo più le istruzioni LEFT/RIGHT ma uso solo il FIND oltre che LEN e DELETE).

In merito alla tua prova: non ti faceva la ripetizione perché quello che ti ho scritto andava inserito in cicli FOR che non ho espressamente indicato.

Ti allego il blocchetto.

Funzionamento: Cerca un singolo carattere e lo elimina, per tutte le volte che viene trovato.


PS
Indentazione da migliorare....😁

 

image.thumb.png.0e9913ab82ed2ffe2e59ddbb7fbe2cc3.png

 

 

Dina-supertramp, grazie mille per il tempo dedicatomi, una domanda, da quello che vedo la tua soluzione se non erro elimina tutti gli spazi della stringa non solo quelli eventualmente iniziali e finali........o sbaglio? 

dina_supertramp
Inserita: (modificato)

image.thumb.png.0e9913ab82ed2ffe2e59ddbb7fbe2cc3.png

 

Alla riga 4 togli l'AND con InChar....non serve a nulla...l

6 minuti fa, Project75 ha scritto:

Dina-supertramp, grazie mille per il tempo dedicatomi, una domanda, da quello che vedo la tua soluzione se non erro elimina tutti gli spazi della stringa non solo quelli eventualmente iniziali e finali........o sbaglio? 

Confermo, elimina tutti quelli che trova

Per eliminare solo quelli all'inizio e alla fine non vedo via diversa o comunque simile a quella indicata da @drn5

Modificato: da dina_supertramp
Inserita:
6 minuti fa, dina_supertramp ha scritto:

image.thumb.png.0e9913ab82ed2ffe2e59ddbb7fbe2cc3.png

 

Alla riga 4 togli l'AND con InChar....non serve a nulla...l

Confermo, elimina tutti quelli che trova

Diciamo che a me interessa togliere eventuali spazi all'inizio ed alla fine della stringa,  in ogni caso proverò l'istruzione potrebbe tornare sempre utile. Grazie mille ancora, gentilissimo. Buona giornata 

dina_supertramp
Inserita:
6 minuti fa, Project75 ha scritto:

Diciamo che a me interessa togliere eventuali spazi all'inizio ed alla fine della stringa,  in ogni caso proverò l'istruzione potrebbe tornare sempre utile. Grazie mille ancora, gentilissimo. Buona giornata 

Di nulla, scusa se mi sono staccato dal tuo obbiettivo iniziale...alla prossima ;)

Inserita:
7 minuti fa, dina_supertramp ha scritto:

Di nulla, scusa se mi sono staccato dal tuo obbiettivo iniziale...alla prossima ;)

Di nulla non c'è problema..... grazie ancora...

 

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...