bravo (1225) の日記

○ ◎ ●

今日のらくださん

bravo による 2003年10月17日 14時36分 の日記 (#162060)

Excelの列ってAとかAAとかあるんですが、それを数値として処理できるようにするための関数でつ。

追記: k3cさんが直してくれますた。この手のアルゴリズムはまだ磨きがたりないな_| ̄|○


sub rowtonum($) {
        my ($row) = @_;
        my $base = ord("a");
        my $interval = ord("z") - $base;
        my $rownum = 0;
        my $dig = 0;
        foreach my $c (reverse(split(//, $row))) {
                $rownum += (ord(lc($c)) - $base + 1) * ($dig * $interval + 1);
                $dig++;
        }
        $rownum--;
        return $rownum;
}

へびだとこうなる。計算がめんどくさいからあんま見た目かわらんかも。

def rowtonum(row):
        base = ord('a')
        interval = ord('z') - base;
        rownum = 0
        dig = 0
        row = list(row)
        row.reverse()
        for c in row:
                rownum += (ord(c.lower()) - base + 1) * (dig * interval + 1)
                dig += 1
        rownum -= 1
        return rownum

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

皆さんもソースを読むときに、行と行の間を読むような気持ちで見てほしい -- あるハッカー

処理中...