2010年9月5日日曜日

strtonum = 10進数、8進数、16進数の文字列を数値に変換する(Gawk専用) - AWK

AWKの数値計算関数と関連機能
AWKの文字列操作関数と関連機能
○Gawk on Windows ○Gawk ×mawk32 ×Mawk ×awk
指定された文字列を、数値に変換します。

o 数字の前にゼロが付いている時、8進数として解釈します。
o 8進数や16進数の場合、正の整数部分だけを変換します。


**** 書式
--------
strtonum( 変換したい値 )
--------

o この関数は、Gawkの拡張機能です。
o 変換したい値 -- 数値に変換したい文字列(例:"39.39だよ")
   + 先頭が 0(= 数字のゼロ)で後ろに数字が続く時、8進数であると解釈します。
   + 先頭が 0x もしくは 0X で後ろに数字が続く時、16進数であると解釈します。
o 戻り値 -- 変換結果


**** 使用例
--------
BEGIN {
  print strtonum("39.3"); # 39.3

  print "# 以下、計算結果の確認です。";
  print strtonum("-39.3aaa"); # -39.3
  print strtonum("012"); # 8進数 = 8 + 2 = 10
  print strtonum("0x12"); # 16進数 = 16 + 2 = 18
  print strtonum("0X12"); # 16進数 = 16 + 2 = 18
  print strtonum("Mikusan"); # 0
}
--------

o 行末のセミコロンは、C言語の書き方に合わせました。無くても動きます。


**** 機能
o 文字列から数値に変換します。
o 8進数や16進数の場合、正の整数部分だけを変換します。

o 先頭が 0 (= 数字のゼロ)で後ろに数字が続く時、8進数と解釈します。
   + 例えば、「012」は 8進数、「0.12」や「-012」は10進数と解釈します。
o 先頭が 0x もしくは 0X で後ろに数字が続く時、16進数と解釈します。
   + 例えば、「0x12」は 16進数、「-0x12」や「0x-12」は 10進数と解釈して0になります。

o その他の場合、10進数と解釈します。
o 実数を指定すると、6桁までに丸めたり、浮動小数点形式になります。
   + この動作を変えたい時は、変数 CONVFMTを使います。詳しくは、「数値から文字列にする時に、実数を7桁以上表示させる方法

o 数値の後ろに文字列が続いていても大丈夫です。
o 先頭に数値以外の文字がある場合
   + 半角空白は読み飛ばし、10進数と解釈します。
   + それ以外の文字があると、0 を返します。
o この機能をサポートしていない処理系があります。

** 処理系に依存する動作
o この機能をサポートしている処理系は、次の通りです。
   + Gawk on Windows 3.1.7
   + Gawk for Windows 3.1.6

o この関数で変換した結果についてです。
o 数値の有効桁数は、15桁程度です。C言語のdouble型に依存しています。
o 整数の値を18桁以上表示する時、処理系毎に表示形式が異なります。
   + 常に整数表示、かつ誤差をそのまま残す処理系 = Gawk for Windows 3.1.6
   + 常に整数表示、かつ、およそ18桁目以降を0で埋める処理系 = Gawk on Windows 3.1.7と


**** メモ
o Gawk以外の処理系の場合、10進数については、文字列の後ろに「+ 0」をつける事で数値化出来ます。
   + 文字列を実数に変換する時、6桁までに丸めたりしますので、必要に応じて変数 CONVFMTを使います。

**** 確認した処理系
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
    ▼制作メモ
    > sqrt = 平方根を求める
    sin = 正弦を求める
    > split = 文字列を分割する
    sprintf = 文字列を組み立てる
    +
    int = 実数や文字列を整数化する
(2010年9月5日変更。表現の訂正。8進数と16進数の判定は、キーワード 0 0x 0Xの後ろに数字が続く事が条件)