Home › Forum › Programmazione IEC 61131 (LogicLab) › Funzione SysVarsnprintf per costruire stringa
- Questo topic ha 6 risposte, 2 partecipanti ed è stato aggiornato l'ultima volta 1 anno, 9 mesi fa da Sergio Bertana.
-
AutorePost
-
Marzo 28, 2013 alle 11:35 am #35350AlessandroPartecipante
Come posso convertire un valore REAL in una stringa utilizzando la funzione SysVarsnprintf ?
Marzo 28, 2013 alle 11:37 am #37613Sergio BertanaAmministratore del forum(Da Wikipedia) Molti linguaggi di programmazione implementano una funzione printf, per visualizzare sullo standard output una stringa costruita in base ad un formato specificato. Tale funzione ha origine dal linguaggio C, dove ha un prototipo simile al seguente: int printf(const char *format, …)
Il parametro format è una stringa che descrive il formato da seguire nell’output e che utilizza delle sequenze segnaposto, introdotte dal simbolo percentuale (“%”), per specificare la posizione relativa e il tipo dei dati con cui comporre la stringa.
Nella libreria delle funzioni embedded di SlimLine abbiamo introdotto le due funzioni:
SysVarfprintf, per inviare la stringa sullo stream (eFILE) di uscita.
SysVarsnprintf, per trasferire la stringa in un buffer di memoria.Rimandiamo al manuale Manuale programmazione IEC61131-3 su sistema SlimLine per una spiegazione dettagliata delle due funzioni.
Marzo 28, 2013 alle 11:45 am #37614Sergio BertanaAmministratore del forumMa per rispondere alla tua domanda ecco lo screenshot di un programma LogicLab che illustra l’uso della funzione SysVarsnprintf per la conversione in stringa di una variabile REAL.
Come si vede dalla finestra di Watch alla variabile Var ho impostato il valore 5.67, la stringa StrOut assume il valore “Value: 5.67” e 11 caratteri sono stati trasferiti in StrOut.
La formattazione %5.2f indica di convertire in stringa una variabile REAL con 5 minimo cifre totali di cui 2 cifre decimali (Nelle cifre totali è compreso il punto). Da notare che siccome il valore della variabile è composto al massimo di 4 cifre 5.67, davanti alla 1a cifra intera è posto uno space.
Settembre 30, 2016 alle 3:34 pm #39716DavidePartecipanteMa se dovessi fare il contrario? Ovvero convertire da stringa a real con la funzione SysVarsscanf come mai il risultato è un numero del tipo 3.6721e-44 ?
Ottobre 1, 2016 alle 6:11 am #39717Sergio BertanaAmministratore del forumEcco lo screenshot di un programma che utilizza la funzione SysVarsscanf con diversi tipi di variabili (Download programma). Alle righe 6 e 7 vi è la conversione da stringa a valore REAL e come vedi dalla visualizzazione delle variabili il valore ritornato in RVar è un numero con la virgola.
Giugno 16, 2022 alle 7:19 pm #65768StefanoPartecipanteSi potrebbe avere un esempio di SysVarsscanf con il formato ‘%{%d%}’ indicato nel manuale?
Ho fatto un programma di test con la stringa ‘ 123 456 ‘ ed il formato come sopra ma SysVarsscanf restituisce sempre FALSE.
Giugno 20, 2022 alle 10:58 am #65825Sergio BertanaAmministratore del forumPurtroppo c’è un errore nella pagina “Stringa formato della funzione scanf” nel tagli/incolla delle definizioni del formato è scappato anche la definizione:
%{format%} Repeatedly matches the format specifier format as many times as possible, and gives an array of arrays with the results. Example: %{%d%} matches zero or more integers.
Ma questo formato non è gestito dalla SysVarsscanf.
-
AutorePost
- Devi essere connesso per rispondere a questo topic.