ISTRUZIONE INSPECT non restituisce numero caratteri corretto

Buongiorno , ho necessita' di contare il numero di caratteri di una stringa,
rispetto all'ultimo carattere valido contenuto in essa.


Data la variabile WS-DESTINATARIO dichiarata PIC X(30) che contiene il valore "COLOR EXPERT                   "
quindi 12 caratteri complessivi compreso lo spazio fra COLOR e EXPERT.


1) Utilizzando l'istruzione

INSPECT WS-DESTINATARIO TALLYING CONTA-CAMPO FOR CHARACTERS

ottengo nella variabile CONTA-CAMPO non il numero dei caratteri contenuti nella stringa che sono 12
ma 30 che e' la lunghezza complessiva del campo.

Non trovo il modo, nella sintassi del comando, di ottenere il valore 12.


2) -Se utiizzo
INSPECT WS-DESTINATARIO TALLYING CONTA-CAMPO
FOR CHARACTERS BEFORE SPACE
ottengo il valore 5 ovvero conta i caratteri sino al primo spazio
( puo' andare bene solo su valori contigui di contenuto di campo)


3) -Solo se utilizzo l'istruzione
INSPECT WS-DESTINATARIO TALLYING CONTA-CAMPO
FOR CHARACTERS BEFORE INITIAL "  " ( lasciando 2 spazi all'interno del literal )
ottengo il valore 12


ma questa istruzione ha delle limitazioni:, in quanto controlla se ci sono 2 caratteri spazio
nella stringa e questi possono essere in qualsiasi punto della stringa  prima dell'ultimo carattere valido, oppure se solo se il contenuto del valore della stringa e' < di 29 caratteri,.


A me interessa conoscere i caratteri complessivi comprensivi degli spazi contenuti in una stringa , fino
all'ultimo carattere valido contenuto su di esso.

C'e' qualcuno che mi puo' indicare la soluzione ?

Grazie. Roberto

  • Suggested Answer

    0  

    Salve,  .

    Provate in questo modo:

    INSPECT WS-DESTINATARIO REPLACING TRAILING SPACES BY low-values
    INSPECT WS-DESTINATARIO TALLYING CONTA-CAMPO FOR CHARACTERS BEFORE low-values

    Ovviamente, se non intendete "sporcare" il campo WS-DESTINATARIO con valori "low-values", potete lavorare su si una variabile "dummy", muovendo il contenuto di WS-DESTINATARIO in una variabile d'appoggio ed eseguendo le due INSPECT su questa.

    A disposizione.

    Claudio Contardi

    Lead Technical Support Specialist
    Rocket Software, Italia
    RocketSoftware.com
    linkedin.com/rocket-software

  • Verified Answer

    +1 in reply to   

    Buonasera Claudio, sto provando la soluzione da lei proposta che mi sembra buona. Il fatto e'  che benche' inizializzo con low-value la variabile dopo l'accept i valori in coda all'ultimo carattere vengono riportati a "2020" hex   . Come faccio a sostituire i caratteri finali della stringa con "000" HEX ? 

    Sarebbe comodo se Inspect avesse nella sintassi la possibilita' di individuare l'ultimo carattere della stringa di elementi non continui separati da spazi . Possibile che l'istruzione Inspect non contempli questo genere di casistica?  

    Non vedo altro modo che fare una routine artigianale dove con una perform conto la posizione del il primo carattere della stringa partendo da destra e per differenza con lunghezza che e' nota calcolo il numero dei caratteri.  

    Ha qualche  suggerimento in proposito? 

    Grazie.

  • Suggested Answer

    0   in reply to 

    L'istruzione ACCEPT dovrebbe inserire nella variabile di riferimento solamente quanto scritto a video dall'utente.
    Non deve aggiungere uno spazio extra alla fine del valore editato.

    Quale runtime state utilizzando? (wrun32 -vv oppure runcbl -vv)

    Il mio consiglio è quello di aprire un Case sul portale: https://portal.microfocus.com/
    così che possiamo valutare più a fondo il problema.

    Se avete problemi nell'accesso, potete trovare maggiori informazioni nell'articolo seguente:

    Logging in to Micro Focus

    A disposizione.

    Claudio Contardi

    Lead Technical Support Specialist
    Rocket Software, Italia
    RocketSoftware.com
    linkedin.com/rocket-software