2012年1月13日金曜日

整数の後にドット0を付加する

全国平年値(1971~2000年)・月別最高気温の表をCalcにコピペすると小数点以下が0の場合、省略されて表示されます↓。これをテキストにしますと当然、省略されたまま。

      でも↓クリックひとつで表示されます。

      ↓こんな感じ



でも、この処理をしないまま流し込まれた整数にドット0を付加する作業を想定、正規表現で処理します。正規表現の復習 2を参考に
(?<!\.)(-?[1-9]\d*|0)(?![\d\.])でマッチかと思いきや、「1月」など後ろに漢字がある数値にもマッチしてしまいます。で、原始的に

(?<!\.)(-?[1-9]\d*|0)(?![\d\.月])

でマッチさせました ((^┰^))ゞ テヘヘ
注:ダメな例です。正解は最後にあります。

ちなみに正規表現で全角ひらがなは[ぁ-ゞ]、漢字は[一-龠]、カタカナは[ァ-ヴ]

置換はグループマーキングされてますので¥1.0(秀丸)で終了^^
いろいろ弄り、どうしてこうなるのか?を考えると嵌りますw


1/16追記:uuun....これだと小数点以下第2位の最後の数値にまでマッチしてしまう。整数、小数点以下第1位から2位までが混在する文章で整数のみをマッチさせるにはどうしたらよかんべ。

自己解決:とりあえずマッチ
(?<![\.\d{2}])(-?\d+)(?![\.\d{2}月])
この場合、置換は¥1.00になります。
注:元がダメだから、ダメなまま。最後が正解。

ついでに小数点以下第1位の数値のみにマッチさせる場合、\d+\.\d(?!\d)

なんでこんなことを書いているかというと表組なら表計算ソフトOKだが、本文中の文章に整数、小数点以下第1位、2位が含まれていて小数点以下を揃えるといった赤字を想定してのことだ。小数の足し算、引き算に
教科書や準拠のドリルには 
   3.5+1.7=5.2
のような小数第1位同士の計算が多く、
   2+0.3=2.3
のように桁が揃っていない計算は、それほど多くはありません。
従って、小数の足し算・引き算は、小数点を揃えるということを、強く意識するまでには至らず終了してしまいます。
筆者は2.0+0.3=2.3を意識して教えることを主張している。ならば小数点のない整数の後にドット0を付加し揃える赤字は十分予想される。

1/16再追記:@happyscriptさんがシンプル
偶然TLでも見かけた&週末に知人からも質問されたので正規表現ネタ。小数点を含む半角数字と小数点を含まない半角数字の混在で、小数点を含まない半角数字にマッチする正規表現は

(?<![0-9.])[0-9]+(?![0-9.])

否定先読み&否定後読みを使うのがポイント
2月、1つ、3ヶとかにマッチさせたくない場合は(?<![0-9.])[0-9]+(?![0-9.月つヶ])
第3位とかにもマッチさせたくない場合は(?<![0-9.])[0-9]+(?![0-9.月つヶ])かな?

他にも\dと[0-9]は同じだよね?とtwitterでつぶやきましたら
\dは全角数字も対象ですー(流星さん)
それが実は違うんですよー 参考「ものかの:正規表現の略記法 \d と \s と \w」 http://tama-san.com/?p=2687(ひらくん)
全角、半角で色々と不具合があるのでユニコード番号で当てた方が安全です。(MSさん)
正規表現のエンジンによってことなりますよー(こうちゃん)
のアドバイスをいただきました。この場を借りてお礼申し上げます。
しかし、最初に書いてから大幅に変わってしまうエントリーになったなw

0 件のコメント:

コメントを投稿