作者: 閑舎
日時: 2003/10/21(11:50)
kusunoki@...-inet.or.jp さん wrote.

> 文字をアスキーコードにして、数字にするというの考えたのですが、そんな関数ないですよね。

sunsite にある gawk のドキュメントを見ると、以下のような関数の定義方法が
載っています。したがって、オリジナルの gawk は ord, chr に当たる関数を持っ
てないということですね。

# ord.awk --- do ord and chr

# Global identifiers:
#    _ord_:        numerical values indexed by characters
#    _ord_init:    function to initialize _ord_
BEGIN    { _ord_init() }

function _ord_init(    low, high, i, t)
{
    low = sprintf("%c", 7) # BEL is ascii 7
    if (low == "\a") {    # regular ascii
        low = 0
        high = 127
    } else if (sprintf("%c", 128 + 7) == "\a") {
        # ascii, mark parity
        low = 128
        high = 255
    } else {        # ebcdic(!)
        low = 0
        high = 255
    }

    for (i = low; i <= high; i++) {
        t = sprintf("%c", i)
        _ord_[t] = i
    }
}

function ord(str,    c)
{
    # only first character is of interest
    c = substr(str, 1, 1)
    return _ord_[c]
}

function chr(c)
{
    # force c to be numeric by adding 0
    return sprintf("%c", c + 0)
}

#### test code Modified by 閑舎
BEGIN    \
{
    for (i = 65; i < 91; i++) {
        printf("ord(%s) = %d\n", chr(i), ord(chr(i)))
    }
}

--
本田博通(閑舎)
テキストとスクリプトの http://rakunet.org/TSNET/