Hatena::Groupnadesiko

99円のへたれ学習帳

2008-04-15

数値をカンマで区切る

| 20:48

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,`)

いうことでPerlメモのまんまですorz

ほら、ワンライナーになってるし一応読める・・・?

 

追記

よく考えるとこれでいいですね。理解しないで書いたのでorz

●カンマ区切(N,X)
  正規表現置換(N,`\G((?:^[-+])?\d{1,`&X&`})(?=(?:\d{`&X&`})+(?!\d))`,`$1,`)

短くするならこんな感じでしょうか

●カンマ区切(N,X)
  正規表現置換(N,`(\d{1,`&X&`})(?=(?:\d{`&X&`})+(?!\d))`,`$1,`)

SWinXSWinX2008/04/23 14:17面白そうなので参加!
●カンマ区切る(SをIで)
 D=Sの文字数%I。リフレイン("#",(I-D)*(D>0))&SをIで行揃え。改行を","に置換。"#"を空に置換

●カンマ区切2(SをIで)
 Sを文字列逆順。Iで行揃え。改行を","に置換。それを文字列逆順

●文字列逆順(Sを)
 Sを文字列分解。配列逆順。""で配列結合

JessalynJessalyn2011/07/10 16:54This article achieved exactly what I wanetd it to achieve.

daupsliojvdaupsliojv2011/07/11 02:45CcVFkX <a href="http://ogxfwmpnbkuj.com/">ogxfwmpnbkuj</a>

dndyhjhizocdndyhjhizoc2011/07/11 21:30ASMfwy , [url=http://lctwxmcqoacm.com/]lctwxmcqoacm[/url], [link=http://isupgmfczsls.com/]isupgmfczsls[/link], http://zrlqrusbfigz.com/

mdfbrymdfbry2011/07/12 18:28hdw9qQ <a href="http://gjcytclixndg.com/">gjcytclixndg</a>

nwerrovnwerrov2011/07/13 23:51zwKeoZ , [url=http://guoooawrvgkq.com/]guoooawrvgkq[/url], [link=http://abujpnuivvqr.com/]abujpnuivvqr[/link], http://dyyyrakiuxkp.com/