×
[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個でもあったらヒットしない)。
ところで\#って、#だけでもいけるような気がしてきた…問題はないんだろうけど。
突然だが仕事で、テキスト処理をする機会がありました。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
この記事にコメントする
カレンダー
10 | 2024/11 | 12 |
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 |
カテゴリー
ブログ価格
最新コメント
(07/16)
(06/11)
(05/31)
(11/12)
無題(返信済)
(09/29)
無題(返信済)
(08/24)
無題(返信済)
(08/18)
無題(返信済)
(07/04)
はじめまして。(返信済)
(06/18)
無題(返信済)
(05/23)
最新記事
(11/10)
(09/29)
(09/26)
(09/18)
(09/15)
(09/14)
(09/07)
(09/04)
(08/30)
(08/25)
最新トラックバック
プロフィール
HN:
二階堂P or けいぽー
性別:
男性
ブログ内検索
アーカイブ
最古記事
(06/18)
(06/18)
(06/18)
(06/23)
(06/30)
(07/02)
(07/07)
(07/12)
(07/17)
(07/24)
カウンター
ニコニコ動画
アクセス解析