Écrire des données formatées dans une chaîne de caractères
Cette instruction écrit les données formatées spécifiées par Data1 (extensible à Data16) vers une chaîne de caractères formatée pour laquelle le format est spécifié par le caractère de contrôle sFormat.
Entrée
Caractère de contrôle avec spécificateurs de format définissant comment la chaîne de caractères formatée doit être créée
Variable chaîne de caractères ou constante de caractères (jusqu’à 256 caractères) spécifiant comment la chaîne de caractères doit être créée.
Le caractère de contrôle comprend le texte, le spécificateur de format (%d,%e, etc.), le code du saut de ligne (\n) et le code du tabulateur (\t).
La chaîne de caractères peut contenir jusqu’à 4096 caractères. Au-delà de 4096 caractères, une erreur d’opération apparaît.
Un maximum de 16 digits peut être spécifié pour le spécificateur de format. Au-delà de 16 digits, une erreur d’opération apparaît.
Le nombre maximum de caractères après conversion d’1 donnée est 32, sauf %s et %S. Au-delà de 32 caractères, une erreur d’opération apparaît.
Toutes les chaînes de caractères qui ne sont pas identifiées comme étant un spécificateur de format sont traitées comme du texte à formater.
Données qui doivent être formatées
Données variables à écrire dans la chaîne de caractères formatée.
Données variables disposées dans l’ordre spécifié dans le caractère de contrôle.
Sortie
Chaîne de caractères formatée avec données au format ASCII.
L’entrée Data1 peut être étendue jusqu’à un maximum de 16 entrées.
Le nombre d’entrées Data1..DataN doit être identique au nombre de spécificateurs de format dans la chaîne de caractères de contrôle spécifiée dans sFormat.
Le type de données en entrée DataN doit correspondre au spécificateur de format indiqué dans sFormat (voir le tableau ci-dessous).
sFormat : par ex. %+12.5d,
Utiliser les données chaînes de caractères au format indiqué ci-dessous pour spécifier le type, le nombre de caractères et la précision de la chaîne de caractères formatée. Diverses options (telles que l’insertion d’un signe ou d’espaces) peuvent être sélectionnées selon le type de données à convertir.
Position dans l’exemple |
Description |
sFormat |
Données binaires |
Résultat de la conversion en données ASCII |
Commentaire |
|
---|---|---|---|---|---|---|
0 |
Ajouter des zéros |
'%05d' |
100 |
'00100' |
Lorsque le nombre de caractères est spécifié, des zéros (0) peuvent être ajoutés au caractère de contrôle sFormat à cette position. |
|
+ |
Ajouter un signe plus |
'%+4d' |
100 |
'+100' |
Largeur de quatre caractères, valeur décimale, signe + ajouté |
|
- |
Alignement à gauche |
'%-6d' |
100 |
'100 |
Largeur de six caractères, valeur décimale, alignement à gauche |
|
![]() |
(espace) ajouter un espace au lieu du signe plus |
'% |
100 |
' |
Largeur de quatre caractères, valeur décimale avec des espaces à gauche |
|
# |
Insérer 0x pour les nombres hexadécimaux |
'%#4X' |
100 |
'0X64' |
Largeur de quatre caractères, valeur numérique au format hexadécimal commençant par 0X |
|
Toujours ajouter un point décimal pour les nombres réels |
'%#8.0f' |
123.45678 |
' |
Largeur de huit caractères, nombre à virgule flottante, quatre espaces à gauche |
||
12 |
Largeur de données ASCII (avec ou sans virgule) Lorsque la largeur est inférieure au nombre de caractères requis par cette valeur, une erreur d'opération apparaît. Pour en savoir plus, voir "Drapeaux d’erreur" |
'%012d' |
100 |
'000000000100' |
Largeur de 12 caractères avec neuf zéros à gauche |
|
Sans largeur : |
'%d,' |
100 |
'100,' |
Pas de largeur spécifiée, une virgule est ajoutée |
||
Précision après le point décimal |
||||||
.5 |
N’importe quel(s) digit(s) après le point décimal |
'%8.3f' |
123.45599 |
' |
Largeur de huit caractères, précision de trois caractères après le point décimal |
|
12.5 |
Spécifier le nombre total de caractères (n) et le nombre de caractères de précision (m) avec [n.m], [n] ou [.m]. Le nombre de caractères de précision (m) change selon le type de données de conversion. |
|||||
d , Ld, i , Li, u ,Lu, x , Lx , b, Lb |
Représente le nombre de caractères dans les chaînes de caractères numériques. |
|||||
f, Lf, e, Le, E, LE |
Représente le nombre de caractères après le point décimal. |
|||||
g, Lg, G, LG |
Représente le nombre de chiffres significatifs. |
|||||
Type de données à convertir |
'%06d' |
100 |
' |
d , i , u , x , X , b : nombre de caractères dans les chaînes de caractères numériques. f : nombre de caractères après le point décimal. g : nombre de chiffres significatifs. |
||
d |
Nombre entier signé ® ASCII décimal |
'%6d' |
100 |
'000100' |
Largeur de six caractères, valeur décimale avec trois zéros à gauche |
|
u |
Nombre entier signé ® ASCII décimal |
'%10u' |
-100 |
' |
Largeur de 10 caractères avec sept espaces à gauche, nombre entier non signé |
|
x |
Nombre entier non signé ® ASCII hexadécimal |
'%4x' |
16#12A |
' |
Largeur de quatre caractères, nombre hexadécimal en caractères minuscules |
|
X |
Hexadécimal, caractère majuscule |
'%4X' |
16#12A |
' |
Largeur de quatre caractères, nombre hexadécimal en caractères majuscules |
|
b |
Nombre entier BCD ® ASCII hexadécimal |
'%5b' |
16#123 |
' |
Largeur de cinq caractères, données BCD |
|
f |
Nombre réel à virgule flottante ® ASCII à virgule flottante |
'%-6.2f' |
1.2345 |
'1.23 |
Largeur de six caractères, alignés à gauche, précision de deux digits après le point décimal |
|
e |
Nombre réel à virgule flottante ® ASCII avec notation exponentielle |
'%9.3e' |
1234.5678 |
'1.235e+03' |
Largeur de 9 caractères, précision de 3 digits après le point décimal, exponentiel, minuscule |
|
E |
Exponentiel, majuscule, par ex. 1.23E10 |
'%9.3E' |
1234.5678 |
'1.235E+03' |
Largeur de 9 caractères, précision de 3 digits après le point décimal, exponentiel, majuscule |
|
g |
Nombre réel à virgule flottante ® ASCII à virgule flottante ou ASCII avec notation exponentielle |
'%12g' |
1234.5678 |
' |
Largeur de 12 caractères, nombre à virgule flottante |
|
G |
À virgule flottante ou exponentiel, caractère majuscule |
'%#9.3G' |
1234 |
' |
Largeur de neuf caractères, précision de trois caractères après le point décimal |
|
s |
Chaîne de caractères ®ASCII |
'%10s' |
abcdef |
'abcdef |
Données chaînes de caractères (pour le nombre de caractères spécifié) |
|
S |
Chaîne de caractères ® caractère majuscule ASCII |
'%-10S' |
abcDEF |
' |
Données chaînes de caractères sensibles à la casse |
Caractère de contrôle |
Données binaires avant conversion |
Données ASCII après conversion |
Exemple |
---|---|---|---|
'%d' ou '%i' |
Données de 16 bits (nombre entier signé) |
Données ASCII décimales |
'%d' , '%5d' , '%+5d" '%-5d' , '%05d' , '%10.5d' , '%d,' , '% d' |
'%Ld' ou '%Li' |
Données de 32 bits (nombre entier signé) |
||
'%u' |
Données de 16 bits (nombre entier non signé) |
'%u' , '%5u' , '%+5u' '%-5u' , '%05u' , '%10.5u' , '%u,' |
|
'%Lu' |
Données de 32 bits (nombre entier non signé) |
||
'%x' |
Données de 16 bits |
Données ASCII hexadécimales (conversion avant/inverse) |
'%x' , '%5x' , '%-5x' '%05x' , '%10.5x' , '%x,' , '%#x' , '%X' |
'%Lx' |
Données de 32 bits |
||
'%b' |
Données BCD de 16 bits |
'%b' , '%5b' , '%-5b' '%05b' , '%10.5b' , '%b,' |
|
'%Lb' |
Données BCD de 32 bits |
||
'%f' |
Données nombre réel, précision simple, 32 bits |
Données ASCII à virgule flottante |
'%f' , '%5.2f' , '%+5.2f' '%-5.2f' , '%05.2f' , '%f,' , '%#f' , '% f' |
'%Lf' |
Données nombre réel, précision double, 64 bits |
||
'%e' |
Données nombre réel, précision simple, 32 bits |
Données ASCII avec notation exponentielle |
'%e' , '%5.2e' , '%+5.2e' '%-5.2e' , '%05.2e' ,'%e,' '%#5.2e' , '% e' , '%E' |
'%Le' |
Données nombre réel, précision double, 64 bits |
||
'%LE' |
Données nombre réel long, précision double, 64 bits |
'%#5.2E' , '% E' , '%E' |
|
'%g' |
Données nombre réel, précision simple, 32 bits |
Données ASCII avec notation exponentielle ou données ASCII à virgule flottante (selon celle qui est la plus petite dans la notation correspondante) |
'%g' , '%5.2g' , '%+5.2g' '%-5.2g' , '%05.2g' ,'%g," '%#5.2g' , '%G' |
'%Lg' |
Données nombre réel, précision double, 64 bits |
||
'%LG' |
Données nombre réel long, précision double, 64 bits |
'%-5.2G' , '%05.2G' ,'%G," '%#5.2G' , '%G' |
|
'%s' |
Données chaînes de caractères |
Données chaînes de caractères (pour le nombre de caractères spécifié) |
'%s' , '%5s' , '%-5s' , '%-05s' |
Si une erreur apparaît dans le caractère de contrôle désigné par sFormat.
Si une conversion avant (+) est indiquée dans sFormat lorsque le format est décimal.
Si le résultat de la conversion est supérieur à la zone de sauvegarde.
Si une largeur de données ASCII spécifiée est inférieure au nombre de caractères requis par la valeur.
Si une erreur apparaît dans le caractère de contrôle désigné par sFormat.
Si une conversion avant (+) est indiquée dans sFormat lorsque le format est décimal.
Si le résultat de la conversion est supérieur à la zone de sauvegarde.
Si une largeur de données ASCII spécifiée est inférieure au nombre de caractères requis par la valeur.
Toutes les variables d’entrée et de sortie utilisées pour programmer cette fonction ont été déclarées dans l’en-tête du POU.Le même en-tête de POU est utilisé pour tous les langages de programmation.
VAR
bFormat: BOOL:=FALSE;
sFormatString: STRING[50]:='Current Value: %6d [Min: %6d, Max: %6d]';
sFormattedString: STRING[50]:='';
iCurrentValue: INT:=815;
iMin: INT:=-16756;
iMax: INT:=23456; END_VAR
La fonction est exécutée lorsque la variable bStart passe de FALSE à TRUE.
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 7 ;
NETWORK_BODY
B(B_CONTACT,,bFormat,7,1,9,3,);
B(B_F,E_FP_FORMAT_STRING-3!,,25,0,36,7,,?DEN?dsFormat?dData1?dData2?dData3?AENO?c);
B(B_VARIN,,sFormatString,23,2,25,4,);
B(B_VAROUT,,sFormattedString,36,2,38,4,);
B(B_VARIN,,iCurrentValue,23,3,25,5,);
B(B_VARIN,,iMin,23,4,25,6,);
B(B_VARIN,,iMax,23,5,25,7,);
L(1,0,1,7);
L(1,2,7,2);
L(9,2,25,2);
END_NETWORK_BODY
END_NET_WORK
END_BODY
if (bFormat) then
sFormattedString := FP_FORMAT_STRING(sFormatString,
iCurrentValue, iMin, iMax);
end_if;