Questa funzione cerca la stringa Needle in Haystack , la ricerca è effettuata in base alla definizione di Mode. Se la stringa è trovata viene ritornato il puntatore all'indirizzo di Haystack dove si trova.

In base alla definizione di Mode può essere ritornato l'indirizzo del primo carattere coincidente oppure l'indirizzo del carattere successivo all'ultimo carattere coincidente. Se stringa non trovata o errore viene ritornato NULL.

Function
CODESYS: Non disponibile
LogicLab: eLLabXUnified12Lib

Haystack (@STRING) Pointer alla stringa dove effettuare la ricerca.

Needle (@STRING) Pointer alla stringa da ricercare.

Mode (FIND_MODE) Definizione modo in cui effettuare la ricerca (Vedi definizione).

La funzione ritorna un (@STRING) indirizzo di Haystack dove Needle è stata trovata, NULL se non trovata.

Errori

In caso di errore la funzione torna 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.

ST_StrFind: Viene eseguita la ricerca della stringa 'World' nella stringa presente in Str che è valorizzata con 'HelloWorld!, helloworld!' con diversi modi di ricerca. Dal pointer ritornato viene sottratto l'indirizzo di allocazione di Str in modo da ottenere la posizione relativa della stringa trovata nella stringa di ricerca. Vediamo i vari risultati.

Position[0]: 5, La ricerca parte dall'inizio e ritorna la posizione di inizio della prima occorrenza.
Position[1]: 10, La ricerca parte dall'inizio e ritorna la posizione successiva alla fine della prima occorrenza.
Position[2]: 18, La ricerca parte dalla fine e ritorna la posizione di inizio della prima occorrenza.
Position[3]: 23, La ricerca parte dalla fine e ritorna la posizione successiva alla fine della prima occorrenza.

TagFinder: Attivando Find, viene eseguita la ricerca del tag definito in TagToFind nel file di tipo CSV definito in Filename. Per eseguire la ricerca vengono lette una alla volte le varie righe del file, in ogni riga viene ricercata la colonna che contiene indicazione del tag da cercare e confrontato il valore con quello ricercato. Si esce quando viene trovato il tag oppure a fine file.

Se il tag è stato trovato Found e a TRUE ed in RBuffer si trova il contenuto della riga relativa. Per non avere loop time troppo lunghi la ricerca viene suddivisa in parti analizzando un numero definito di righe (Nell'esempio 10). Sono calcolati i tempi di esecuzione di ogni parte  di ricerca e della intera ricerca. A titolo di riferimento con un file CSV del tipo indicato che contiene 1000 righe su di un sistema Cortex M7 per trovare il tag nell'ultima riga occorrono circa 150 mS.

LogicLab (Ptp116)
PROGRAM ST_SysStrFind
VAR
    Position : ARRAY[ 0..3 ] OF UDINT; (* Found position *)
    Str : STRING[ 32 ] := 'HelloWorld!, helloworld!'; (* Source string *)
END_VAR

// *****************************************************************************
// PROGRAM "ST_SysStrFind"
// *****************************************************************************
// Some find examples.
// -----------------------------------------------------------------------------

    Position[0]:=SysStrFind(ADR(Str),ADR('World'), FIND_DEFAULT)-ADR(Str);
    Position[1]:=SysStrFind(ADR(Str),ADR('World'), FIND_GET_END)-ADR(Str);
    Position[2]:=SysStrFind(ADR(Str),ADR('World'), FIND_FROM_END OR FIND_NO_CASE)-ADR(Str);
    Position[3]:=SysStrFind(ADR(Str),ADR('World'), FIND_FROM_END OR FIND_GET_END OR FIND_NO_CASE)-ADR(Str);

// [End of file]
LogicLab (Ptp181)

Ti è stato utile questo articolo ?

Ultimo aggiornamento: 17 Febbraio 2021