Vai al contenuto

Verifica correttezza caratteri in una stringa codice

Home Forum Programmazione IEC 61131 (LogicLab) Verifica correttezza caratteri in una stringa codice

Stai visualizzando 2 post - dal 1 a 2 (di 2 totali)
  • Autore
    Post
  • #83499
    Anonimo
    Inattivo

    Ho un lettore di barcode connesso alla porta seriale di uno SlimLine, la mia esigenza è di verificare la correttezza della stringa di codice ricevuta dal lettore.

    I codici acquisiti sono composti da un massimo di 32 caratteri alfanumerici, ma succede che alcune volte nella stringa di codice appaiano caratteri diversi (Esempio segni di punteggiatura, parentesi, ecc). Mi chiedevo se esiste una funzione in grado di eseguire in modo semplice questa verifica.

    #83504
    Sergio Bertana
    Amministratore del forum

    La soluzione è utilizzare le regular expressions (o espressioni regolari), che sono uno strumento potentissimo per cercare, verificare o manipolare testo usando dei modelli (pattern).

    Vediamo come realizzare un semplice programma che soddisfi le tue necessità:

    VAR
        SStr : STRING[ 32 ]; (* Source string *)
        DStr : STRING[ 32 ]; (* Destination string *)
        Ok : BOOL;
    END_VAR
    
        eTO_JUNK(SysVsscanf(ADR(SStr), ADR('%32[0-9a-zA-Z]'), STRING_TYPE, ADR(DStr)));
        Ok:=(SStr = DStr);

    In SStr si trova la stringa da controllare, la funzione SysVsscanf la scansiona accettando tutti i caratteri che soddisfano la definizione racchiusa tra parentesi quadre fino ad un massimo di 32 caratteri e memorizza il risultato in DStr. Se la stringa risultato è uguale alla stringa sorgente il valore è corretto, si attiva la varioabile Ok. Si possono definire d iversi pattern di controllo:

        eTO_JUNK(SysVsscanf(ADR(SStr), ADR('%32[a-zA-Z]'), STRING_TYPE, ADR(DStr))); //Caratteri alfabetici (Maiuscoli/Minuscoli)
        eTO_JUNK(SysVsscanf(ADR(SStr), ADR('%32[a-zA-Z ]'), STRING_TYPE, ADR(DStr))); //Caratteri alfabetici (Maiuscoli/Minuscoli) e space
        eTO_JUNK(SysVsscanf(ADR(SStr), ADR('%32[a-z]'), STRING_TYPE, ADR(DStr))); //Caratteri alfabetici (Minuscoli)
        eTO_JUNK(SysVsscanf(ADR(SStr), ADR('%32[0-9]'), STRING_TYPE, ADR(DStr))); //Solo numeri
Stai visualizzando 2 post - dal 1 a 2 (di 2 totali)
  • Devi essere connesso per rispondere a questo topic.