Questa funzione permette di cambiare l'indicatore di posizione del file precedentemente aperto dalla funzione Sysfopen e passato come stream nel parametro File. Il parametro Offset specifica il numero di bytes dall'origine indicata nel parametro Origin, dove posizionare l'indicatore di posizione.

La funzione ritorna un (DINT) con il valore attuale dell'indicatore di posizione. In caso di errore l'indicatore di posizione rimane inalterato e la funzione ritorna EOF.

Function
CODESYS: Non disponibile
LogicLab: eLLabXUnified12Lib

File (FILEP) Flusso dati stream riferito al file su disco aperto con la funzione Sysfopen.

Offset (DINT) Numero di bytes dall'origine dove posizionare l'indicatore di posizione.

Origin (INT) Definizione posizione di origine (Vedi definizione).

La funzione ritorna un (DINT) con il valore attuale dell'indicatore di posizione, EOF se errore.

Errori

In caso di errore la funzione ritorna EOF, 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.
Nell'esempio ad ogni attivazione da debug della variabile RLine, viene letta una riga dal file C:/System/Logs.txt che contiene i logs di sistema e la riga letta viene trasferita nella variabile LString che è visualizzabile in debug.

LogicLab (Ptp116)
PROGRAM ST_Sysfseek
VAR
    RLine : BOOL; (* Read line command *)
    Line : USINT; (* Line number *)
    i : UDINT; (* Auxiliary counter *)
    RChars : INT; (* Number of characters read *)
    FPos : DINT; (* File read position *)
    Ptr : @BYTE; (* Auxiliary pointer *)
    Fp : FILEP; (* File pointer *)
    LString : STRING[ 128 ]; (* Line string *)
END_VAR

// *****************************************************************************
// PROGRAM "ST_Sysfseek"
// *****************************************************************************
// At every set of the "RLine" command a line of text is read from the
// "C:/System/Logs.txt" file and stored in the "LString" variable.
// -----------------------------------------------------------------------------

    // -------------------------------------------------------------------------
    // FILE READ
    // -------------------------------------------------------------------------
    // Wait for a "RLine" command.

    IF NOT(RLine) THEN RETURN; END_IF;
    RLine:=FALSE; //Read line command

    // Open the file, exit on error.

    Fp:=Sysfopen('C:/System/Logs.txt', 'r'); //File pointer
    IF (Fp = NULL) THEN RETURN; END_IF;

    // Set position to read on file.
    // On error, there is not more lines to read.

    IF (Sysfseek(Fp, FPos, ID_SEEK_SET) = EOF) THEN
        i:=Sysfclose(Fp); //Close file
        RETURN;
    END_IF;

    // Read a line from file. It's assumed that every line has maximum 128
    // characters.

    RChars:=Sysfread(ADR(LString), TO_INT(SIZEOF(LString)), 1, Fp); //Number of characters read
    i:=Sysfclose(Fp); //Close file

    // If no characters are read, the file is ended.

    IF (RChars = 0) THEN RETURN; END_IF;

    // Have surely read at least one line. The line ends with   check
    // if there are line terminators.

    Ptr:=SysStrFind(ADR(LString),ADR('$r$n'), FIND_GET_END); //Auxiliary pointer
    IF (Ptr = NULL) THEN RETURN; END_IF;

    // Terminate the read line just after .

    @Ptr:=0; //Insert "0" end of line marker

    // Set file position to the start of next line.

    FPos:=FPos+TO_DINT(Ptr-ADR(LString)); //File read position
    Line:=Line+1; //Line number

// [End of file]

Ti è stato utile questo articolo ?

Ultimo aggiornamento: 28 Agosto 2019