チリペヂィア

リンクフリー。サンプルコードなどは関連記事内でライセンスについて明示されない限り商用利用なども自由に行って構いませんが、自己責任でお願いします。またこれら日記内容の著作権自体は放棄していません。引用部分については引用元の権利に従ってください。

小ネタ日記

小ネタその1。文字列からファジーに空白削除。

System.String test = "\t\t \n\r\thoge\t "; // 改行やら全角スペースも混じってる
test = System.String.Join(System.String.Empty, test.Split(null)); //hogeだけになる

Splitはセパレータにnull指定すると空白文字全般で分割するので、それをString.EmptyでJoinするだけ。わざわざSplitするあたりパフォーマンスは良くない気がしますが、とりあえず何でも良いならこんなもんではないでしょうか。

MSDNも詳しくは書いてないけど多分Char.IsWhitespace()的な判定じゃないかなとは思いますが、Char構造体にIs〜じゃなくて単にWhitespacesて配列が定義されればもっと使いやすい気がするんですが、うーむ。Stringライブラリに変な制御文字を突っ込むと挙動がおかしくなるとかあるんだろうか…

VisualStudioのエディタでも正規表現置換できるけど、タグ付き置換にハマる。

小ネタその2。一般的な正規表現による"\1"みたいな再利用置換はグループ分けの()に番号を割り振ると思ってたんですがんですが、VSの場合は{}でくくった部分に番号が割り振られます。あれ…繰り返し回数指定ェ…(*1

例)"//! @brief"で始まるdoxygenコメを元に、doxygen無視コマンドとともに一行summaryタグを挿入する置換コマンド(C++/C#用)

検索文字列:^{([ \t]*)}//![ \t]+\@brief[ \t]+{(.*)}
置換文字列:\1/// @cond

\2 @endcond\n\0

これを実行するとこんな感じ

//! @brief Hogeメンバですよ。
public int Hoge;

が、次のように。

/// @cond <summary>Hogeメンバですよ。</summary> @endcond
//! @brief Hogeメンバですよ。
public int Hoge;

C#の入力補完にコメントが出るので少し幸せ。

*1:マイクロソフトの開発系トピックにはこういうパターンの独自仕様が多いのよね…拡張機能に一般的な名詞を使った上に、似てるけど違う機能でアレ?みたいな。これはなんていうか、私企業製品とフリー開発の対立でもあるような気がします。期限付きのセールス計画があった上でとりあえず落とすところに落とした製品としての技術仕様と、オープンなコミュニティでじっくり煮立てられた結論は、途中で分派して似て非なるものになる上、未熟な仕様が製品として大手を振って先発してしまうのは道理でもあり古今枚挙に暇なし。他にはIBMとかもやってそう。あと国内の電気兼業でやってる三菱とかもう開き直ってるレベル。こういう問題の回避センスはGoogleくらいがギリギリ及第点くらいかもしれません。Appleなんかはもう独自路線すぎてぶっ飛んでますし。AppleScript言うところの不気味の谷問題とかちょっと面白い。