#acl SomeUser:read,write All: read = Lightweight Language Lovers = == Python vs Ruby == システム部門で働いていると、テキストデータの受渡しが多いことでしょう。[[BR]] 最近はWEBが使ったシステムが多く、データの連携において機種依存文字や外字が含まれていないか[[BR]] チェックが必要なケースが増えてきました。 以下はPython で書いていたチェックプログラムです。[[BR]] 必要に迫られて作ったので、文字の範囲を1バイト目だけで判断するなど、かなりのやっつけのプログラムです。 :) {{{#!python # -*- coding: cp932 -*- """ Handle SJIS charcters""" class SjisChars: def __init__(self, s): self.s = s def check(self, d): self.isKanji = ((0x81 <= d <= 0x9F) or (0xE0 <= d <= 0xFC)) self.isKisyu = (d in (0x87, 0xED, 0xEE, 0xFA, 0xFB, 0xFC)) self.isGaiji = (0xF0 <= d <= 0xF9) def scan(self): a = [c for c in self.s] while len(a) > 0: c = a.pop(0) self.check(ord(c)) if self.isKanji: c += a.pop(0) yield c if __name__ == '__main__': sc = SjisChars("abcd漢字外字機種依存") for c in sc.scan(): print c, sc.isKanji, sc.isKisyu, sc.isGaiji }}} シフトJIS文字列を操作するクラスで、check は漢字か否か等を判定してメソッド、scan は、2バイト文字(漢字)を考慮して1"文字"づつ返すメソッドです。ここで、[[BR]] 「ジェネレータは、イテレータを作成するための簡潔で強力なツールです。」http://www.python.jp/doc/release/tut/node11.html#SECTION0011900000000000000000 を使いました。Pythonだと理屈が分からなくとも :) 簡単に高級な機能を使うことができます。 ---- CategoryRuby