SysVsscanf, extracts values from string

  1. Home
  2. Knowledge Base
  3. Manualistica
  4. Programmazione IEC 61131-3
  5. Gestione stringhe
  6. SysVsscanf, extracts values from string

Questa funzione legge la stringa Str e ne interpreta il contenuto basandosi sulla stringa definita in Format che specifica il formato con il quale interpretare la variabile. In VarType è indicato il tipo di variabile ed in VarAdd il suo indirizzo.

La funzione ritorna TRUE se valore variabile trovato, in caso contrario FALSE.

Function
CODESYS: Non disponibile,
LogicLab: eLLabXUnified12Lib

Str (@STRING) Pointer alla variabile stringa da cui estrarre la variabile.

Format (@STRING) Ha due tipi di argomenti, i caratteri ordinari che vengono controllati nella variabile String da leggere e le specifiche di conversione, contraddistinte dal simbolo percentuale (%) e da un carattere che specifica il formato con il quale interpretare la variabile definita vedi tabella sotto.

VarType (VR_TYPE) Tipo variabile da estrarre (Definizione).

VarAdd (@eVOID) Indirizzo variabile.

La funzione ritorna una variabile (BOOL), FALSE se errore, TRUE se la variabile è stata acquisita.

Errori

In caso di errore la funzione ritorna FALSE, eseguendo immediatamente dopo la funzione SysGetLastError è possibile rilevare il codice di errore. Fare riferimento alla tabella seguente per la descrizione.

Esempi

Come utilizzare gli esempi.
Sono riportati alcuni esempi di acquisizione valore variabile da una stringa.

LogicLab (Ptp116)
PROGRAM ST_SysVsscanf

VAR
    AStr : STRING[ 32 ]; (* Auxiliary string *)
    Res : ARRAY[0..14] OF BOOL; (* Scanf results *)
    UDVar : ARRAY[0..2] OF UDINT; (* UDINT variable *)
    RVar : ARRAY[0..3] OF UDINT; (* REAL variable *)
    SVar1 : STRING[ 8 ]; (* String variable *)
    USVar : ARRAY[0..1] OF USINT; (* USINT variable *)
    SVar2 : STRING[ 8 ]; (* String variable *)
    SVar3 : STRING[ 8 ]; (* String variable *)
    SVar4 : STRING[ 8 ]; (* String variable *)
    SVar5 : STRING[ 8 ]; (* String variable *)
    SVar6 : STRING[ 8 ]; (* String variable *)
END_VAR

// *****************************************************************************
// PROGRAM "ST_SysVsscanf"
// *****************************************************************************
// Some examples of read formatted data from string.
// -----------------------------------------------------------------------------

    // -------------------------------------------------------------------------
    // READ INTEGER DATA
    // -------------------------------------------------------------------------
    // The first and second function executions return TRUE and the relate UDVar
    // are set to 1234. The third execution returns FALSE and the relate UDVar
    // is set to 0.

    AStr:='Value:1234'; //Auxiliary string
    Res[0]:=SysVsscanf(ADR(AStr), ADR('Value:%d'), UDINT_TYPE, ADR(UDVar[0]));
    Res[1]:=SysVsscanf(SysStrFind(ADR(AStr), ADR('Value:'), FIND_GET_END), ADR('%d'), UDINT_TYPE, ADR(UDVar[1]));
    Res[2]:=SysVsscanf(ADR(AStr), ADR('%d'), UDINT_TYPE, ADR(UDVar[2]));

    // -------------------------------------------------------------------------
    // READ REAL DATA
    // -------------------------------------------------------------------------
    // The two executions return TRUE and the relate RVar are set to 12.34.

    AStr:='Value:12.34'; //Auxiliary string
    Res[3]:=SysVsscanf(ADR(AStr), ADR('Value:%f'), REAL_TYPE, ADR(RVar[0]));
    Res[4]:=SysVsscanf(SysStrFind(ADR(AStr), ADR('Value:'), FIND_GET_END), ADR('%f'), REAL_TYPE, ADR(RVar[1]));

    // -------------------------------------------------------------------------
    // READ DATA WITH DIGIT DEFINITION
    // -------------------------------------------------------------------------

    AStr:=' 124.5 '; //Auxiliary string
    Res[5]:=SysVsscanf(ADR(AStr), ADR('%d'), USINT_TYPE, ADR(USVar[0])); //USVar[0]=124
    Res[6]:=SysVsscanf(ADR(AStr), ADR('%2d'), USINT_TYPE, ADR(USVar[1])); //USVar[1]=12

    Res[7]:=SysVsscanf(ADR(AStr), ADR('%f'), REAL_TYPE, ADR(RVar[2])); //RVar[2]=124.5
    Res[8]:=SysVsscanf(ADR(AStr), ADR('%2f'), REAL_TYPE, ADR(RVar[3])); //RVar[3]=12.0

    // -------------------------------------------------------------------------
    // READ STRING EXAMPLES
    // -------------------------------------------------------------------------

    AStr:='ab+cd:e'; //Auxiliary string
    Res[9]:=SysVsscanf(ADR(AStr), ADR('%s'), STRING_TYPE, ADR(SVar1)); //SVar1='ab+cd:e'
    Res[10]:=SysVsscanf(ADR(AStr), ADR('%3s'), STRING_TYPE, ADR(SVar2)); //SVar2='ab+'
    Res[11]:=SysVsscanf(ADR(AStr), ADR('%3[a-z]'), STRING_TYPE, ADR(SVar3)); //SVar3='ab'
    Res[12]:=SysVsscanf(ADR(AStr), ADR('%[a-z]'), STRING_TYPE, ADR(SVar4)); //SVar4='ab'
    Res[13]:=SysVsscanf(ADR(AStr), ADR('%[^+]'), STRING_TYPE, ADR(SVar5)); //SVar5='ab'
    Res[14]:=SysVsscanf(ADR(AStr), ADR('%[^:]'), STRING_TYPE, ADR(SVar6)); //SVar5='ab+cd'

// [End of file]

Ti è stato utile questo articolo ?

Ultimo aggiornamento: 25 Settembre 2020