CONVFMT = 数値を文字列に自動変換する時の書式 - AWK
○Gawk on Windows ○Gawk ○mawk32 ○Mawk ○awk
数値と文字列を並べて書く時の、数値から文字列への自動変換に使う書式です。o 但し、printを使って数値1つだけを書き出す時は、変数OFMTで指定した書式を使います。
**** 書式
--------
CONVFMT
もしくは
CONVFMT = "表示用書式"
--------
o CONVFMTは変数です。初期値は"%.6g"、パーセント記号の後ろにピリオドが入っています。
o 表示用書式 -- printfで指定出来る書式の中から、実数を変換出来るものを選びます。例。"%.10g"
**** 使用例
--------
BEGIN {
CONVFMT = "%.10g";
print "名前と、食べたケーキの量";
print "ミクさんは、" 1/3 "個";
print "リンちゃんは、" 1/3 "個";
print "レン君は、" "作る時に味見。";
print "ルカ様は、" 1/3 "個";
}
--------
o 行末のセミコロンは、C言語の書き方に合わせました。無くても動きます。
**** 機能
o 数値と文字列を並べて書くと、AWKは、数値から文字列に自動変換します。その時に使う書式です。
+ 数値と数値を並べた時も、CONVFMTを使います。
+ printを使って数値1つだけを書き出す時は、変数OFMTを使います。
o 関数の文字列引数に数値を指定した時も、CONVERTを使って自動変換します。
o 初期値は"%.6g"、パーセント記号の後ろにピリオドが入っています。
o カンマで区切った時は、カンマの間に数値と他の値が並んで入っている所に対して、この書式を使います。
o CONVFMTに従って変換するのは、他の値と連結するように書いた時などです。
+ カンマで区切る場合は、カンマ間に複数の値がある場合、CONVFMTを使って変換します。
+ 関数に渡す時の変換も、CONVFMTを使っていました。
--------
print "ミクさん" 1/3
print "ミクさん" 1/3, 1/3 1/3
v = "ミクさん" 1/3
v = 1/3 1/3
v = length(1/3)
--------
o 一方、printで数値を1つだけ指定する時は、CONVFMTの効き目はありません。変数OFMTを使います。
**** メモ
o CONVFMTが正しく動かない時の原因
+ CONVFMTの設定が効いていない様に見える場合 = 変数OFMTにも、CONVFMTと同じ値を入れてみます。
+ 整数の値が変になる = 実数にも対応出来る値を指定します。例外はGawk。変数CONVFMTににおける書式"%d"(整数値で出力)をサポートしている模様です。
+ プログラム実行途中で強制終了する = 変数CONVFMTに、誤った書式"%s"(文字列を出力)を渡すと、処理系によっては起こる事があります。この現象が発生した処理系は、mawk32 1.3.3 / Mawk for Windows 1.3.3 / original = the one true awk(updated May 1, 2007)です。(Gawkでは起こりませんでした。)
**** 確認した処理系
o Gawk on Windows 3.1.7
o Gawk for Windows 3.1.6
o mawk MBCS (32bit版) 1.3.3
o Mawk for Windows 1.3.3
o original = the one true awk(updated May 1, 2007)
==
関連ページ:
▼AWKの数値計算関数と関連機能(▼ABC順)
▼AWKの文字列操作関数と関連機能(▼ABC順)
▼AWKの入出力関数とコマンド実行機能(▼ABC順)
▼AWKプログラムを書く(▼ABC順)
▼AWK
▼制作メモ
> ?: = 条件演算子
> IGNORECASE = 文字列比較の時に、大文字小文字を区別させない(Gawk専用)
> FIELDWIDTHS = 固定長ファイルを読み込む為の設定
+
print = ファイルなどに書き出す
OFMT = printを使って数値1つだけを書き出す時の書式