2008-04-15
数値をカンマで区切る
TIPS, ショートコーディング |
http://nadesiko.g.hatena.ne.jp/kisaburo/20080415/name
ただ単に数値を区切るだけなら、「通貨形式」を使って以下のようにできるようです。
"123456"を通貨形式 表示 # → 123,456
自分はたまにTOPOZOさんなどとコードをいかに短くするか、という遊びをするのですが、今回はなでしこ標準機能で済ますのはつまらない(?)ということで、以下の仕様の関数を作ってみました。もちろん短く(^ ^;
というわけでTOPOZOさんのコード。
●カンマ区切る(I,N) qとは整数=文字数(I);pとは整数=INT(q/N);(p-NOT(q%N))回;I=文字挿入(I,q-(回数*N)+1,",");(回数=p)なら戻( I)
NOTやらなにやら、無理矢理ワンライナーにするテクニックがいっぱいです。読めません><
●カンマ区切る(A,N) Bとは文字列;(文字数(A)%N)ならB="("&リフレイン("#",文字数(A)%N)&")" (文字数(A)/N)回;追加(B,"("&リフレイン("#",N)&")") 一致(A,B);戻(文字右端削除(置換(抽出文字列,改行,","),1))
あえてワイルドカードを使ってみたようです。原理がよくわかりません><
で、自分の書いたものですが
●カンマ区切(N,X) 正規表現置換(N,`\G((?:^[-+])?\d{1,`&X&`})(?=(?:`&リフレイン(`\d`,X)&`)+(?!\d))`,`$1,`)
ほら、ワンライナーになってるし一応読める・・・?
追記
●カンマ区切(N,X) 正規表現置換(N,`\G((?:^[-+])?\d{1,`&X&`})(?=(?:\d{`&X&`})+(?!\d))`,`$1,`)
短くするならこんな感じでしょうか
●カンマ区切(N,X) 正規表現置換(N,`(\d{1,`&X&`})(?=(?:\d{`&X&`})+(?!\d))`,`$1,`)
トラックバック - http://nadesiko.g.hatena.ne.jp/kyuuzyuu9yen/20080415
リンク元
- 86 http://nadesiko.g.hatena.ne.jp/
- 4 http://a.hatena.ne.jp/white-ball-nako/
- 2 http://nadesiko.g.hatena.ne.jp/keyword/INT
- 2 http://nadesiko.g.hatena.ne.jp/searchword?word=INT
- 1 http://nadesiko.g.hatena.ne.jp/mr-80b/20080407/p1
- 1 http://www.google.com/search?q=ナデシコする VisualBasic&hl=ja&lr=&as_qdr=all&pwst=1&start=10&sa=N
- 1 http://nadesiko.g.hatena.ne.jp/topictree
- 1 http://www.google.co.jp/search?hl=ja&q=ナデシコする&lr=
- 1 http://nadesiko.g.hatena.ne.jp/searchword?word=抜ける
- 1 http://nadesiko.g.hatena.ne.jp/searchword?word=ラベル
●カンマ区切る(SをIで)
D=Sの文字数%I。リフレイン("#",(I-D)*(D>0))&SをIで行揃え。改行を","に置換。"#"を空に置換
●カンマ区切2(SをIで)
Sを文字列逆順。Iで行揃え。改行を","に置換。それを文字列逆順
●文字列逆順(Sを)
Sを文字列分解。配列逆順。""で配列結合