nishiru3の日記

備忘録です。ネットのゴミ。

数値データかどうかのチェック

モチベーション

  • 数値解析をしていると、入力データや出力データが数値データになっているかのチェックをする事が多い。
  • 解析そのものはFortranC言語で書いてるので、入力時や出力時のチェックを行うのも良いが、文字や文字列処理を書くのはめんどくさい。
  • AWKPerlであれば文字や文字列処理は得意。
  • ひと手間かかるが、AWKPerlで一度確認した方が結果的に時間がかからない。

AWKの場合

プログラム

BEGIN{
    FS = ','
}
/^[+-]?([0-9]+[.]?[0-9]*|[.][0-9]+)([eE][+-]?[0-9]+)?$/{
    print $0;
}
END{
}
  • BEGIN内では、フィールドセパレータ(FS)をカンマに設定している。

概略

  • 「^」:最初にマッチ
  • 「$」:最後にマッチ
  • 「[+-]?」:+もしくは-が付いても付かなくても構わない。
  • 最初の小かっこ内は、仮数部に引っかかるようなパターンである。
  • 次の小かっこ内は、指数部に引っかかるようなパターンである。ただし、カッコ後に「?」が付いているので、指数部はあってもなくても構わない。

仮数

  • [0-9]+で1コ以上の数値の並び。
  • 「[.]?」で小数点があってもなくても構わない。
  • [0-9]*でその後の数字が0コ以上。
  • 「|」は、または、の意。整数部が0の場合省略可能。

指数部

  • 指数部は「[eE]」で表記。プログラムによってはDとかでも出力されるので、[eED]としておけば、「e」もしくは「E」もしくは「D」で引っかかるようにできる。
  • 「[+-]?」は指数部のプラスマイナスにマッチする。あってもなくても良い
  • 「[0-9]+」は「1.0E-10」の「10」なんかに引っかかる。「+」が付いているので、1コ以上の数字が必要。
  • 最後の「?」は、指数部全体にかかるので指数部はあってもなくても構わない。

この表現はPerlでも使える。

プログラミング言語AWK

プログラミング言語AWK

  • 作者: A.V.エイホ,P.J.ワインバーガー,B.W.カーニハン,足立高徳
  • 出版社/メーカー: USP研究所
  • 発売日: 2010/01/01
  • メディア: 単行本(ソフトカバー)
  • クリック: 1回
  • この商品を含むブログを見る