2010年6月2日水曜日

length = 文字列や配列の長さを調べる - AWK

AWKの文字列操作関数と関連機能
AWKの配列操作関数と関連機能
○(文字数)Gawk on Windows ○(文字数)Gawk △(バイト数。配列不可)mawk32 △(バイト数。配列不可)Mawk ○(バイト数)awk
文字列や配列の長さを調べます。

o 数値を指定すると、文字列に変換した後の長さを調べます。
o 配列サポートは、Gawk系とOriginal(= the one true awk)特有の機能です。


**** 書式
--------
length( [調べたい文字列] )
--------

o 調べたい文字列 -- 省略した時は、変数 $0 の長さを調べます。
   + 次の処理系では、配列を指定する事も出来ます。
      + Gawk on Windows 3.1.7
      + Gawk for Windows 3.1.6
      + original = the one true awk(updated May 1, 2007)
o 戻り値 -- 文字列もしくは配列の長さ

o 文字を数える時の単位は、処理系によって異なります。
   + (漢字などの全角文字が混じっている場合、長さが変わります。)
   + Gawk系は、文字数で数えます。
      + Gawk on Windows 3.1.7
      + Gawk for Windows 3.1.6
   + その他は、バイト数で数えます。
      + mawk MBCS (32bit版) 1.3.3
      + Mawk for Windows 1.3.3
      + original = the one true awk(updated May 1, 2007)


**** 使用例
--------
BEGIN {
  print length("ミクさん。"); # 5 (or 10)

  print length("MikuSan"); # 7
  print length(39.39); # 5
  print length(); # 0。この時には、$0 は空です。
}
{
  print length(); # $0の長さ。入力した行が「39san」の時、5
}
--------

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


**** 機能
o 指定した文字列の長さを返します。長さの単位は処理系によって異なります。
o 処理系によっては、配列の長さ(= 要素数)を調べる事も出来ます。
o 指定を省略した時は、変数 $0 の長さを返します。

o 文字列の代わりに数値を指定すると、数値を文字列に変換してから使用します。
   + 長い整数を指定すると、最後の方の桁が0になったり、浮動小数点形式になります。
   + 実数を指定すると、6桁までに丸めたり、浮動小数点形式になります。
   + この動作は変える事も出来ます。詳しくは、「数値から文字列にする時に、実数を7桁以上表示させる方法

** 処理系に依存する動作
o 文字を数える時の単位は、処理系によって異なります。
   + 文字数で数える処理系
      + Gawk on Windows 3.1.7
      + Gawk for Windows 3.1.6
   + バイト数で数える処理系
      + mawk MBCS (32bit版) 1.3.3
      + Mawk for Windows 1.3.3
      + original = the one true awk(updated May 1, 2007)


**** メモ
o Gawk on Windows 3.1.7は、バイト数で数えさせる事も出来ます。オプション「 -Wctype=ASCII」を追加します。
o Gawk系で、UTF-8のテキストファイルを読み込む場合、1行目に限り、$0と $1について、表示されている文字数よりも多く数える事があります。
     + Gawk on Windows 3.1.7 = 1文字多く数えます。
     + Gawk for Windows 3.1.6 = 2文字多く数えます。
   + 原因は、UTF-8で保存したファイルの先頭にあった、UNICODE特有の見えない文字(= BOM = EF BB BF)。
   + Windows XPのメモ帳で保存する時に UTF-8を指定すると、BOMが付くみたいです。
   + 対策方法は「UTF-8のファイルから、BOMを除去する方法


**** 確認した処理系
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
    ▼制作メモ
    > index = 文字列の登場位置を調べる
    match = 正規表現の登場位置を調べる
    > delete = 配列の要素を削除する
    asort = 配列の要素を並び替える(Gawk専用)
(2010年10月4日変更。Gawk on WindowsのACSIIオプションは、-Wとctypeの間を詰める)
(2010年8月24日追加。配列を指定した時の動作)
(2010年6月20日追加。Gawk on Windowsには、バイト数を数えさせる方法がある)
(2010年6月10日追加。数値を指定した時の動作)

index = 文字列の登場位置を調べる - AWK

AWKの文字列操作関数と関連機能
○(文字数)Gawk on Windows ○(文字数)Gawk ○(バイト数)mawk32 ○(全角不可)Mawk ○(全角不可)awk
文字列の登場位置を調べます。


**** 書式
--------
index( 検索対象文字列, 検索語句 )
--------

o 検索対象文字列
o 検索語句 -- 検索する文字列です。
    + 正規表現で検索したい時は、matchを使います。
o 戻り値 -- キーワードが見つかった位置(先頭は1)。
   + 文字を数える時の単位は、処理系によって異なります。詳細は、下の通りです。
   + 見つからない時は 0を返します。

o 文字を数える時の単位は、処理系によって異なります。
   + (漢字などの全角文字が混じっている場合、長さが変わります。)
   + Gawk系は、文字数で数えます。
      + Gawk on Windows 3.1.7
      + Gawk for Windows 3.1.6
   + その他は、バイト数で数えます。
      + mawk MBCS (32bit版) 1.3.3
   + 但し、全角文字を使うと、結果不正になる事のある処理系もありました。
      + Mawk for Windows 1.3.3
      + original = the one true awk(updated May 1, 2007)


**** 使用例
--------
BEGIN {
  print index("ミクさん、おはようございます。", "ミクさん"); # 1

  print index("おはようございます。ミクさん。", "。"); # 10 (or 19)
  print index("おはようございます。ミクさん。", "MEIKOさん"); # 0
  print index("39さん、おはようございます。", 39); # 1
  print index(1239.039, 39); # 3
}
--------

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


**** 機能
o 2番目に指定した文字列を使って、1番目の文字列を検索します。
o 先頭で見つけた時、1を返します。
   + 先頭は0ではありません。JavaScriptに慣れている方は、要注意です。
o 見つからなかった時、0を返します。
o 複数見つけた時、先頭に最も近い位置を返します。

o 文字列の代わりに数値を指定すると、数値を文字列に変換してから使用します。
   + 長い整数を指定すると、最後の方の桁が0になったり、浮動小数点形式になります。
   + 実数を指定すると、6桁までに丸めたり、浮動小数点形式になります。
   + この動作は変える事も出来ます。詳しくは、「数値から文字列にする時に、実数を7桁以上表示させる方法

** 処理系に依存する動作
o 文字を数える時の単位は、処理系によって異なります。
   + 文字数で数える処理系
      + Gawk on Windows 3.1.7
      + Gawk for Windows 3.1.6
   + バイト数で数える処理系
      + mawk MBCS (32bit版) 1.3.3
   + バイト数で数える処理系、かつ全角文字を使うと結果不正になる事のある処理系
      + Mawk for Windows 1.3.3
      + original = the one true awk(updated May 1, 2007)


**** メモ
o Gawk on Windows 3.1.7は、バイト数で数えさせる事も出来ます。オプション「 -Wctype=ASCII」を追加します。


**** 確認した処理系
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
    ▼制作メモ
    > match = 正規表現の登場位置を調べる
    substr = 文字列の一部を取り出す
    int = 実数や文字列を整数化する
    +
    length = 文字列や配列の長さを調べる
    IGNORECASE = 文字列比較の時に、大文字小文字を区別させない(Gawk専用)
(2010年10月4日変更。Gawk on WindowsのACSIIオプションは、-Wとctypeの間を詰める)
(2010年6月20日追加。Gawk on Windowsには、バイト数を数えさせる方法がある)
(2010年6月10日追加。数値を指定した時の動作)

int = 実数や文字列を整数化する - AWK

AWKの数値計算関数と関連機能
AWKの文字列操作関数と関連機能
○Gawk on Windows ○Gawk ○mawk32 ○Mawk ○awk
整数にします。数学的な切り捨てを行います。

o 変換したい値が「整数値に近い実数」の時は、注意します。計算誤差で1つずれる事があるからです。


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

o 変換したい値 -- 整数に変換したい数値。文字列で指定する事も出来ます(例:"39.39だよ")。
o 戻り値 -- 変換結果


**** 使用例
--------
BEGIN {
  print int(39.39); # 39

  print "# 以下、計算結果の確認です。";
  print int("-39.39aaa"); # -39
  print int("          39.39"); # 39
  print int("aaa39.39"); # 0
}
--------

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


**** 機能
o 数値であると解釈して、小数点以下を0にします。
o 有効桁数は、処理系によって異なります。
   + 32ビットOS用の処理系の場合、15桁程度みたいです。
   + 処理系というよりも、処理系を作った(= コンパイルした)時の環境で決まるみたいです。
o 負の値を指定した時、0に近づけますので、値としては大きくなります。
   + int(-1.5) は -1 になります。
o 数値の後ろに文字列が続いていても、大丈夫です。
o 先頭に数値以外の文字がある場合
   + 半角空白は読み飛ばします。
   + それ以外の文字があると、0 を返します。

** 処理系に依存する動作
o 数値の有効桁数は、15桁程度です。C言語のdouble型に依存しています。
o 整数の値が 2147483647を超える時、処理系毎に表示形式が異なります。
   + 常に整数表示、かつ誤差をそのまま残す処理系 = Gawk for Windows 3.1.6
   + 常に整数表示、かつ、およそ18桁目以降を0で埋める処理系 = Gawk on Windows 3.1.7と オリジナル(the one true awk(updated May 1, 2007))
   + 2147483647を超えると、浮動小数点形式で表示する処理系(= 実際の値の有効桁数は、上の処理系と同じです。) = mawk系(mawk MBCS (32bit版) 1.3.3 と Mawk for Windows 1.3.3)


**** メモ
o AWKに限った事ではありませんが、数値計算では、整数化などの、値を丸める機能の使い方が、一番難しいと思います。
o コンピューターの計算誤差に対して、計算結果の値が正しくなるように、補正する必要があるからです。


**** 確認した処理系
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
    ▼制作メモ
    > strtonum = 10進数、8進数、16進数の文字列を数値に変換する(Gawk専用)
    sqrt = 平方根を求める
    sin = 正弦を求める
    split = 文字列を分割する
(2010年6月12日追加。オリジナルawkなどの動作)
(2010年6月10日追加。有効桁数)