結果文字列へのフォーマットデータの書き込み
この命令は、Data1(Data16まで拡張可能)で指定されたフォーマットデータを、制御文字列sFormatでフォーマットの指定されているフォーマット文字列に書き込みます。
入力
フォーマット文字列の作成形式を定義するフォーマット指定子付き制御文字列
文字列の作成形式の定義を含む文字列変数または文字定数(最大256文字)。
制御文字列は、テキスト、フォーマット指定子(%d,%e, etc.)、改行コード(\n)、タブコード(\t)で構成されます。
フォーマット文字列に入るのは最大4096文字です。4096文字を超えた場合、演算エラーが発生します。
フォーマット指定子は最大16桁指定できます。16桁を超えた場合、演算エラーが発生します。
1つのデータの変換後の最大文字数は、%sや%Sを除いて32文字です。32文字を超えた場合、演算エラーが発生します。
フォーマット指定子として認識されない文字列はすべて、フォーマット対象のテキストとなります。
フォーマット対象データ
フォーマット文字列に書き込まれる変数データ。
変数データは制御文字列で指定された順序どおりにしてください。
出力
ASCIIフォーマットのデータのフォーマット文字列
入力Data1は、入力数最大16まで拡張できます。
入力数Data1DataNは、入力文字列のsFormatに指定したフォーマット指定子の数と同じであることが必要です。
DataNの入力のデータ型は、sFormatの対応するフォーマット指定子に対応したものであることが必要です(次表参照)。
sFormat。例:%+12.5d,
型、文字数、フォーマット文字列の精度を指定するには、以下に示すフォーマットの文字列データを使用します。変換するデータ型によっては、オプションの選択(符号やスペースの挿入など)が可能です。
例での位置 |
説明 |
sFormat |
バイナリデータ |
ASCIIデータの変換結果 |
コメント(M) |
|
---|---|---|---|---|---|---|
0 |
ゼロパディング |
'%05d' |
100 |
'00100' |
文字数が指定されている場合、sFormatは、この位置の制御文字列にゼロ(0)を追加することで、ゼロパディングを使用できます。 |
|
+ |
+符号を付加 |
'%+4d' |
100 |
'+100' |
文字長4、10進数、+記号追加 |
|
- |
左揃え |
'%-6d' |
100 |
'100' |
文字長6、10進数、左揃え |
|
(スペース)プラス記号の代わりにスペースを追加 |
'%4d' |
100 |
'100' |
文字長4、10進数、スペース挿入 |
||
# |
16進数に0xを挿入 |
'%#4X' |
100 |
'0X64' |
文字長4、0Xから始まる16進形式の数値 |
|
実数には必ず小数点を付加 |
'%#8.0f' |
123.45678 |
'123.' |
文字長8、浮動小数点数、先頭にスペース4つ |
||
12 |
ASCIIデータ要素の長さ(カンマあり/なし) 文字長がこの値で必要な文字数より小さい場合、操作エラーが発生します。「エラーフラグ」を参照してください。 |
'%012d' |
100 |
'000000000100' |
文字長12、先頭にゼロ9つ |
|
文字長なし: |
'%d,' |
100 |
'100,' |
長さ指定なし、カンマの付加 |
||
小数点以下の精度 |
||||||
.5 |
任意の小数点以下の桁数 |
'%8.3f' |
123.45599 |
'123.456' |
文字長8、小数点以下3文字の精度 |
|
12.5 |
全桁数(n)および精度桁数(m)を[n.m]、[n]、または[.m]として指定します。精度桁数(m)は、変換するデータ型によって変化します。 |
|||||
d , Ld, i , Li, u ,Lu, x , Lx , b, Lb |
数値文字列の文字数を表します。 |
|||||
f, Lf, e, Le, E, LE |
小数点以下の文字数を表します。 |
|||||
g, Lg, G, LG |
有効桁数を表します。 |
|||||
変換するデータ型 |
'%06d' |
100 |
'100' |
d , i , u , x , X , b:数値文字列の文字数。 f:小数点以下の文字数。 g:有効桁数。 |
||
d |
符号付き整数®10進ASCII |
'%6d' |
100 |
'000100' |
文字長6、10進数、先頭にゼロ3つ |
|
u |
符号なし整数®10進ASCII |
'%10u' |
-100 |
'100' |
文字長10、先頭にスペース7つ、符号なし整数 |
|
x |
符号なし整数®16進ASCII |
'%4x' |
16#12A |
'12a' |
文字長4、16進数小文字 |
|
X |
16進数大文字 |
'%4X' |
16#12A |
'12A' |
文字長4、16進数大文字 |
|
b |
BCD整数®16進ASCII |
'%5b' |
16#123 |
'123' |
文字長5、BCDデータ |
|
f |
浮動小数点実数®浮動小数点ASCII |
'%-6.2f' |
1.2345 |
'1.23' |
文字長6、左揃え、小数点以下2桁の精度 |
|
e |
浮動小数点実数®指数表記ASCII |
'%9.3e' |
1234.5678 |
'1.235e+03' |
文字長9、小数点以下3桁の精度、指数小文字 |
|
E |
指数大文字1.23E10 |
'%9.3E' |
1234.5678 |
'1.235E+03' |
文字長9、小数点以下3桁の精度、指数大文字 |
|
g |
浮動小数点実数®浮動小数点ASCIIまたは指数表記ASCII |
'%12g' |
1234.5678 |
'1234.57' |
文字長12、浮動小数点数 |
|
G |
浮動小数点または指数大文字 |
'%#9.3G' |
1234 |
'1.E+03' |
文字長9、小数点以下3文字の精度 |
|
s |
文字列®ASCII |
'%10s' |
abcdef |
'abcdef' |
文字列データ(文字数指定あり) |
|
S |
文字列®ASCII大文字 |
'%-10S' |
abcDEF |
'abcDEF' |
文字列データ(大文字小文字の区別あり) |
制御文字 |
変換前のバイナリデータ |
変換後のASCIIデータ |
例 |
---|---|---|---|
'%d'または'%i' |
16ビットデータ(符号付き整数) |
10進ASCIIデータ |
'%d' , '%5d' , '%+5d" '%-5d' , '%05d' , '%10.5d' , '%d,' , '% d' |
'%Ld'または'%Li' |
32ビットデータ(符号付き整数) |
||
'%u' |
16ビットデータ(符号なし整数) |
'%u' , '%5u' , '%+5u' '%-5u' , '%05u' , '%10.5u' , '%u,' |
|
'%Lu' |
32ビットデータ(符号なし整数) |
||
'%x' |
16ビットデータ |
16進ASCIIデータ(正/逆方向) |
'%x' , '%5x' , '%-5x' '%05x' , '%10.5x' , '%x,' , '%#x' , '%X' |
'%Lx' |
32ビットデータ |
||
'%b' |
16ビットBCDデータ |
'%b' , '%5b' , '%-5b' '%05b' , '%10.5b' , '%b,' |
|
'%Lb' |
32ビットBCDデータ |
||
'%f' |
32ビット単精度実数データ |
浮動小数点ASCIIデータ |
'%f' , '%5.2f' , '%+5.2f' '%-5.2f' , '%05.2f' , '%f,' , '%#f' , '% f' |
'%Lf' |
64ビット倍精度実数データ |
||
'%e' |
32ビット単精度実数データ |
指数表記ASCIIデータ |
'%e' , '%5.2e' , '%+5.2e' '%-5.2e' , '%05.2e' ,'%e,' '%#5.2e' , '% e' , '%E' |
'%Le' |
64ビット倍精度実数データ |
||
'%LE' |
64ビット倍精度長実数データ |
'%#5.2E' , '% E' , '%E' |
|
'%g' |
32ビット単精度実数データ |
指数表記ASCIIデータまたは浮動小数点ASCIIデータ(表記が短い方を採用) |
'%g' , '%5.2g' , '%+5.2g' '%-5.2g' , '%05.2g' ,'%g," '%#5.2g' , '%G' |
'%Lg' |
64ビット倍精度実数データ |
||
'%LG' |
64ビット倍精度長実数データ |
'%-5.2G' , '%05.2G' ,'%G," '%#5.2G' , '%G' |
|
'%s' |
文字列データ |
文字列データ(文字数指定あり) |
'%s' , '%5s' , '%-5s' , '%-05s' |
sFormatで指定した制御文字列に異常がある場合
sFormatで指定した変換フォーマットが10進数のときに、変換方向を順方向 (+) とした場合
変換結果がエリアを超える場合
ASCIIデータ要素の文字長に対して、その値に必要な文字数より小さい値が指定された場合
sFormatで指定した制御文字列に異常がある場合
sFormatで指定した変換フォーマットが10進数のときに、変換方向を順方向 (+) とした場合
変換結果がエリアを超える場合
ASCIIデータ要素の文字長に対して、その値に必要な文字数より小さい値が指定された場合
POUヘッダには、このプログラムで使用するすべての入力変数と出力変数を宣言します。POUヘッダは全プログラム言語で使用できます。
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
変数bStartが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;