忍者ブログ
ADMINWRITE
趣味的ブログです。最近ニコマスPとしての日記になってきてるかもしれません。というか確定的に明らかか。
[183]  [182]  [181]  [180]  [179]  [178]  [177]  [176]  [175]  [174]  [173
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

がんがって書いたらブログの値段が元に戻った←最初からちゃんとしる(笑)。

突然だが仕事で、テキスト処理をする機会がありました。C++のソースで、#ifdef / #ifndef でモードを切り替えるようになってたんだけど、片方のモードがもはや不要ということで…。

#ifdef __SYMBOLIC_CONSTANT__
(ブロック1)
#else
(ブロック2)
#endif

のような形のとき、ブロック1の部分だけ残して後は消すという作業をします。ファイルは300個くらいあるので、手作業でやってたらきりがない&絶対ひとつや二つは間違えます。

たいていのC++コンパイラには、プリプロセス結果を出力する機能があるのですが、それだと他の記号定数やらインクルードやら全て解決された状態で出てくるので使い物にならない。上の記号定数だけを解決した状態で出さなきゃなりません。そんなツールあるかわかんないし、自分で書いちゃえと。

まあ、#ifdefと#ifndefでは出力すべき節の論理が逆になるとか、途中にスペースがあったらいかんからちゃんと網羅できるようにしなきゃいけないとか、ブロックの中にさらにifdefがあったりとか。あと、結果的には良かったけど、#if defined って記述もあったけどケアし忘れてました。まぁ、今回のソースにはなかったからいいけど。その辺はどの言語を使うかという話とは別ですね。

で、どの言語を使うかですが、いまどきawk使ってます。用途を満たすのに不足はないけど、いまさらawkというのもねぇ。実はちょっとpython勉強してるんですが、やはり慣れた言語を使っちゃいます。新たに勉強するのに今更perlというのもないし、pythonかrubyなんだけど、オフサイドルールを美しいと思える人なので、やっぱりpythonかなぁ。あと、コードの読みやすさは大事でしょう、うん。perlは読めないコードになりがちらしいので(笑)。

なお、awkでは正規表現の\sが使えないようで一瞬「?」でした。\sとか\Wとか大好きなんですが、perlくらいにならないとサポートしてないのね。

^\s*\#\s*ifdef\s+__SYMBOLIC_CONSTANT__

みたいなのがヒットしないからなぁ。なまじ、

^\s*\#\s*ifdef __SYMBOLIC_CONSTANT__

がそこそこヒットするから困る(笑)。\sがどう解釈されてるか知らないけど(たぶん's'?)、*だから0回繰り返しもOKで、

#ifdef __SYMBOLIC_CONSTANT__

にはヒットするからね(笑・#の前後にスペースやタブが1個でもあったらヒットしない)。

ところで\#って、#だけでもいけるような気がしてきた…問題はないんだろうけど。
PR
この記事にコメントする
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
この記事へのトラックバック
この記事にトラックバックする:
カレンダー
07 2017/08 09
S M T W T F S
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
ブログ価格
最新コメント
(07/16)
(06/11)
(05/31)
(11/12)
無題(返信済)
(09/29)
無題(返信済)
(08/24)
無題(返信済)
(08/18)
無題(返信済)
(07/04)
(06/18)
無題(返信済)
(05/23)
最新トラックバック
プロフィール
HN:
二階堂P or けいぽー
性別:
男性
バーコード
ブログ内検索
カウンター
ニコニコ動画

アクセス解析

Designed by 湯月   Material by ウタノツバサ
Copyright c [ 二階堂Pのニコマス他の日記 ] All Rights Reserved.

忍者ブログ [PR]