Python と C/C++ と...
プログラ厶とスカートの丈はロングよりショートが好みです。
↪ 新規投稿する
全29件 - 29 19 9
11 owa #e8faefa 2004/02/04 10:40 prob:0.0%
Python-2.3.3 の言語リファレンスとチュートリアルの翻訳完了したそうです。ありがたいことです、感謝 http://www.python.jp/Zope/ http://sourceforge.jp/projects/pythonjp/files/?release_id=8006#8006
10 owa #e8faefa 2003/12/19 16:04 prob:0.0%
psycopg 使い易いですね。例えば --- import psycopg dsn = 'dbname=bbs user=*** host=*** password=***' try: conn = psycopg.connect(dsn) curs = conn.cursor() curs.execute("SELECT * FROM chatmaintb ORDER BY mid") rows = curs.fetchall() for r in rows: print '%3d %-20s %s' % (r[0], r[1], r[2][:50]) conn.close() except: print 'exception occurred!' --- などと python でシームレスに使える。 今まで知りませんでした。無駄なコードが必要ありません。 C/C++ だと余計なこと書かされるので、多分この数倍のサイズになってしまう;;
09 owa #e8faefa 2003/12/08 00:10 prob:0.0%
Python2.3 は 2.3.2 で終わりかと思ったら 2.3.3 出るみたい http://www.python.org/2.3.3/index.html バグフィックスのみの良品らしい。 早く 2.3 使える状況にならないかなー
08 kiyo #7cfd9bf 2003/11/28 15:58 prob:0.0%
>>7 充分なテストではないですが、今のところ問題なさそうです。 しかし owa さんすごいなあー 僕のソース消して正解(見なかった事にして下さい)
07 owa #e8faefa 2003/11/28 13:57 prob:0.0%
>>6 すいません必要だったのは表示カラム数分のサイズでしたね;; --- def columns_in_utf(s, cols): size = len(s) cpos = 0 bytes = 0 while (cols > 0) and (cpos < size): c = ord(s[cpos]) if (c & 0x80) == 0: bytes = 1 cols -= 1 elif (c & 0xe0) == 0xc0: bytes = 2 cols -= 1 # 何カラム使うのかなぁ? elif (c & 0xe0) == 0xe0: bytes = 3 cols -= 2 else: break cpos += bytes if (cols < 0) or (cpos > size): cpos -= bytes return s[:cpos] --- と直してみました。一ヶ所出来てませんけど。
06 kiyo #7cfd9bf 2003/11/28 13:32 prob:0.0%
>>4 こんなんじゃどうでしょう http://fzug.com/fzug_prog/UTF で試してみました。 私の作ったScript 指定された文字及び長さ -------------- 漢1字ひ2らabcがなカ4896タ78901カナ, 20 -------------- 返った文字 [ 漢1字ひ2らabcがなカ4 ] utf-8での文字長さ [ 27 ] 切り取られた長さ [ 27 ] owa さん作ったScript 呼び出し utfsize("漢1字ひ2らabcがなカ4896タ78901カナ",int(20 / 2 * 3)) 指定された文字及び長さ -------------- 漢1字ひ2らabcがなカ4896タ78901カナ, 20 -------------- 返った文字 [ 漢1字ひ2らabcがなカ4896 ] <-- len が 23 になる utf-8での文字長さ [ 30 ] 切り取られた長さ [ 30 ] 呼び出し utfsize("漢1字ひ2らabcがなカ4896タ78901カナ",20) 指定された文字及び長さ -------------- 漢1字ひ2らabcがなカ4896タ78901カナ, 20 -------------- 返った文字 [ 漢1字ひ2らabcが ] <-- len が 15 になる utf-8での文字長さ [ 20 ] 切り取られた長さ [ 20 ] 文字範囲の指定が必要?
05 kiyo #7cfd9bf 2003/11/28 12:22 prob:0.0%
>>4 こんなんじゃどうでしょう おお、プロのコード綺麗だあー。 後で試してみます。
04 owa #e8faefa 2003/11/28 11:58 prob:0.0%
とり急ぎ、こんなんじゃどうでしょう --- def utfsize(s, size): n = 0 while n < size: c = ord(s[n]) len = 0 if c & 0x80 == 0: len = 1 elif c & 0xe0 == 0xc0: len = 2 elif c & 0xe0 == 0xe0: len = 3 else: break if n + len > size: break n += len return n --- あとは後程...
03 kiyo #7cfd9bf 2003/11/28 09:48 prob:0.0%
おはよう御座います。 >># chkutf8 の例外処理は必要なのかなー buff[pos+1], buff[pos+2] を調べていますので、実際に存在しない領域をポイントしたら、エラーになると思ってそうしました。 >> 最初から辿らないと判定できないはずです。 今回のテキスト切り取りに関しては、必要ないような気もしますが、、、 切り取ろうとする位置が全角の一バイト目以外は処理する必要が無いような? 但し、utf-8 ではテキスト表現方法に3つのパターンがあるようです。(間違ってたら突っ込み希望) -- 引用 -- まず,ISO 10646の「0000 0000〜0000 007F」(16進表記)までを「0xxx xxxx」(0と1のビット表記:ここでは1バイトになる)で表わす。  次の「0000 0080〜0000 07FF」までは,1バイト目を110,2バイト目を10で始める「1110 xxxxx 10xxx xxx」(2バイト)で表わす。  同様に次の「0000 0800〜0000 FFFF」は「1110 xxxx 10xx xxxx 10xx xxxx」(3バイト)で表わす。  こうすればASCII文字は1バイトで済み,「0000 0080〜0000 07FF(かなに相当する部分)」は日本語のひらがな・カタカナやヨーロッパの文字まで入れて2バイトで済む。さらに3バイトで漢字を含めたBMPが全部収まることになる。 ---- この3つのパターンを python の len(xx) 関数及びスライスが utf-8 での正しい長さになりません。 んで、utf8len で切り取るポイントの長さ(utf-8 での)をテキスト先頭から調べて is_utf8 で2バイト目又は3バイト目なのか調べて切り取るポイント位置を変更しているつもりです。 # ソースはとってもダサダサですがそんな気持ちで書いてます。 と書いていて気がついた。 utf-8 での len(xx) は正しくないから while n < len(buff): if int(pos / 2 * 3) < n: break は while n < int(pos / 2 * 3): と書くべきだな pos / 2 * 3 は、utf-8 が全部3バイトだったときの切り取る最大の長さのつもりです 例えば pos が 8 だとすると、すべて全角文字なら pos / 2 で全角4個 この全角が全て3バイトとすると、4 * 3 = 12 # ここまで書くと失礼かも知れませんが、文章がヘタなので許して下さい。
02 owa #e8faefa 2003/11/27 23:04 prob:0.0%
文字列の切り取りメソッドについて (COREBlog から移動しました) 文字列の切り取りコードですが、私的には若干異論がありまして 1. 文字コードは最初から順に見て行かないと判定できない。 2. サイズで切る処理はもともと表示する用途が主なので、サイズは小さいだろう このへんを出発点に考えていました。 # 作成するコードはその時の条件によって変化するので、 # utility.py がどうこうと云う話ではありません。 記憶に頼って書いて居るので間違いがあるかもしれませんが、 Shift_JIS, EUC-JP 何れも日本語の何バイト目かの判定は 最初から辿らないと判定できないはずです。(UTF8 は調べます) # 約束はしませんが、Python コードは書こうと思ってます。