FC2ブログ

サラリーマンのすらすらIT日記

IT関連を中心とした日々を綴ります。
--/--/--

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
2009/09/27

数字を3桁カンマ区切りにするawkのscript

以前、数字を3桁区切りで表示するJavaScriptを書きましたが、今回同じ機能をawkで書くことになりました。

なぜawkで3桁区切りすることになったのかを説明します。XMLデータのある項目に数値データがあるのですが、このXMLデータをExt JSのgridで表示するのに、そのまま渡すと当然数値データをカンマ区切りにしてくれません。数値データの場合、gridのcolumnsのところで何かを指定するとカンマ区切りにしてくれるのかもしれませんが、よくわかりません(実は後でわかったので、最後に書きます)。なので、元々のXMLデータの数値データにカンマを付けておいて、Ext JSに渡せばいいと思ったわけです。

XMLデータは、元々CSV形式データのものをawkのscriptで整形したものでしたから、そのawkのscriptにカンマ区切りの機能を付加すればいいわけです。

さて、例によってweb検索すると、ありました。こちらです。そのものずばりのscriptでエレガントな感じです。しかし私が使っているWindows用のgawkだとうまくいきません。while文で無限ループになっているようです。どうやらsub関数の仕様がLinuxのawk(gawk)とWindows用のgawkとで異なるのでしょう。

で、作ることになりました。

function addComma(num) {
while (match(num, /[0-9]+/) > 0) {
if (RLENGTH <= 3) break;
else {
num1 = substr(num, 1, RSTART+RLENGTH-4);
num2 = substr(num, RSTART+RLENGTH-3);
num = num1 "," num2;
}
}
return num;
}

です。あまりエレガントではありません。

まず、「数字を3桁区切りで表示するJavaScript」の時のように、match(num, [0-9]+[0-9][0-9][0-9])でマッチさせようとしても、この関数は0を返します。例えばnum = "1234567.8901"とすると、"[0-9]+"の部分で"1234567"までマッチしてしまい、以下の[0-9][0-9][0-9]に相当するものがないとして、0を返すのでしょうか([0-9][0-9][0-9]を[0-9]{3}とする表記はWindows版gawkではダメのようです)。

また、JavaScriptの時の、カッコで囲んだ正規表現を$1に渡すというのが、awkでは&で渡せますが、それが複数個の場合JavaScriptのように$1,$2,...で渡すようなものがawkにはありません(少なくとも私のWindows版gawkにはないと思う)。

したがってやり方としては非常に原始的ですが、数字の並びを検索して、3個以下なら区切らない、3個を超えているとマッチした末尾の3文字の数字とそれ以降の文字列をnum2にそれより前をnum1に入れて、num1とnum2をカンマでくっつける。その繰り返しです。これはLinuxのawk(gawk)でも動きました。

参考までに書きますと、num1の行を

num1 = substr(num, RSTART, RSTART+RLENGTH-4);

とすると、先頭にマイナス記号があった場合、マイナスを書いてくれません。

で、前述のサイトにあったawkのscriptですが、私のLinux環境でも動きません。何か私のやり方がまずいのかもしれませんが、今回自作のものが動いたので、とりあえず追求せずに終わりとします。

と、ここまで書いてからExt JSの本を見ると、ありましたね、"金額を3桁ごとに区切って表示"というのが。rendererを書けばいいとは...まあ、いいか、何かの時にこのawkscriptが役立つかも(と自分に言い聞かせている...)

スポンサーサイト

コメント

コメントの投稿

  • URL
  • コメント
  • パスワード
  • 秘密
  • 管理者にだけ表示を許可する

トラックバック

トラックバックURL:http://sookibizviz.blog81.fc2.com/tb.php/232-8f7caf0e

■  カレンダー

04 | 2019/05 | 06
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 -

■  プロフィール

sookibizviz

Author:sookibizviz
仕事の内容やソフトの紹介を交えながら、日々の悪戦苦闘を綴っていきます。

■  最新記事

■  最新コメント

■  最新トラックバック

■  月別アーカイブ

■  カテゴリ

未分類 (64)
BizViz (24)
IT (1119)
計量 (76)
環境 (26)
数学 (181)
ニュース (46)
本 (187)
音楽 (113)
囲碁 (5)
将棋 (26)
ブログ (14)
日記 (19)

■  FC2カウンター

■  検索フォーム

■  RSSリンクの表示

■  QRコード

QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。