MW211 EXIT

devlog
Windows7/KoreaなんとかCenter
2013年03月31日
Windows7を再インストールしてたら、
「Korea Media Player Center」と「Korea Messenger Center」ってのが
デスクトップのショートカットとしてあらわれた。

うわっ!ウイルス?って思ってしまったが、
韓国語の言語パックをインストールすると追加されるみたい。

韓国の公正取引委員会がどうしたこうしたでこんな形になってるらしい。

びっくりしたよ、もう。
分類:Windows
C言語/qsort()構造体配列の並び替え
2013年03月30日
qsort関数は、構造体配列も並び替えることができる。
構造体内には複数の項目があるので、そのうちキーとする項目を選び、
それに対して比較関数で並び替えの比較をするように実装する

数値項目をキーとして並び替える場合。
┌──────────────────────────────────────┐
│typedef struct {                                                            │
│    int   キー;                                                             │
│    char  その他項目[16];                                                   │
│} 構造体型;                                                                 │
│構造体型  配列[];                                                           │
│// 構造体配列にサンプルデータを設定するところは省略                         │
├──────────────────────────────────────┤
│int  配列数 = sizeof(配列) / sizeof(配列[0]);                               │
│qsort(配列, 配列数, sizeof(配列[0]), 比較関数);  // ソート実行              │
├──────────────────────────────────────┤
│// 昇順にする場合                                                           │
│int  比較関数(const void* a, const void* b)                                 │
│{                                                                           │
│    return  ((構造体型*)a)->キー - ((構造体型*)b)->キー;                    │
│}                                                                           │
├──────────────────────────────────────┤
│// 降順にする場合                                                           │
│int  比較関数(const void* a, const void* b)                                 │
│{                                                                           │
│    return  ((構造体型*)b)->キー - ((構造体型*)a)->キー;                    │
│}                                                                           │
└──────────────────────────────────────┘

文字列項目をキーとして並び替える場合。
┌──────────────────────────────────────┐
│typedef struct {                                                            │
│    char  キー[16];                                                         │
│    int   その他項目;                                                       │
│} 構造体型;                                                                 │
│構造体型  配列[];                                                           │
│// 構造体配列にサンプルデータを設定するところは省略                         │
├──────────────────────────────────────┤
│int  配列数 = sizeof(配列) / sizeof(配列[0]);                               │
│qsort(配列, 配列数, sizeof(配列[0]), 比較関数);                             │
├──────────────────────────────────────┤
│// 昇順にする場合                                                           │
│int  比較関数(const void* a, const void* b)                                 │
│{                                                                           │
│    return(strcmp((char*)(((構造体型*)a)->キー),                            │
│                  (char*)(((構造体型*)b)->キー)));                          │
│}                                                                           │
├──────────────────────────────────────┤
│// 降順にする場合                                                           │
│int  比較関数(const void* a, const void* b)                                 │
│{                                                                           │
│    return(strcmp((char*)(((構造体型*)b)->キー),                            │
│                  (char*)(((構造体型*)a)->キー)));                          │
│}                                                                           │
└──────────────────────────────────────┘
分類:C/C++
C言語/qsort()
2013年03月29日
qsort関数は、第四引数に比較関数名を指定して、
その比較関数で昇順降順の実装を行う。
なお、昇順と降順は、比較する項目の順番を入れ替えるだけ切り替えることができる。

数値配列を並び替える場合。
┌──────────────────────────────────────┐
│int  配列[] = {3,1,5,2,4};  // サンプルデータ                               │
├──────────────────────────────────────┤
│int  配列数 = sizeof(配列) / sizeof(配列[0]);                               │
│qsort(配列, 配列数, sizeof(配列[0]), 比較関数);  // ソート実行              │
├──────────────────────────────────────┤
│// 昇順にする場合  → 1,2,3,4,5                                             │
│int  比較関数(const void* a, const void* b)                                 │
│{                                                                           │
│    return *(int*)a - *(int*)b;                                             │
│}                                                                           │
├──────────────────────────────────────┤
│// 降順にする場合  → 5,4,3,2,1                                             │
│int  比較関数(const void* a, const void* b)                                 │
│{                                                                           │
│    return *(int*)b - *(int*)a;                                             │
│}                                                                           │
└──────────────────────────────────────┘

文字列配列を並び替える場合。
┌──────────────────────────────────────┐
│char*  配列[] = {"ccc","aaa","eee","bbb","ddd"};  // サンプルデータ         │
├──────────────────────────────────────┤
│int  配列数 = sizeof(配列) / sizeof(配列[0]);                               │
│qsort(配列, 配列数, sizeof(配列[0]), 比較関数);  // ソート実行              │
├──────────────────────────────────────┤
│// 昇順にする場合  → "aaa","bbb","ccc","ddd","eee"                         │
│int  比較関数(const void* a, const void* b)                                 │
│{                                                                           │
│    return strcmp(*(const char**)a, *(const char**)b);                      │
│}                                                                           │
├──────────────────────────────────────┤
│// 降順にする場合  → "eee","ddd","ccc","bbb","aaa"                         │
│int  比較関数(const void* a, const void* b)                                 │
│{                                                                           │
│    return strcmp(*(const char**)b, *(const char**)a);                      │
│}                                                                           │
└──────────────────────────────────────┘
strcmp()を使うところがミソ。

※NULLの対策が抜けていた(後述)
分類:C/C++
C言語/strlen()とNULL
2013年03月22日
「strlen()」は指定されたアドレスから最初に出現する「NULL(\0)」の手前までの
長さを計測してくれる関数。

ということで、つい、「NULL(\0)」を渡したら「0」になるじゃないかと錯覚しがち。
┌──────────────────────────────────────┐
│strlen("")                                                            →0   │
│strlen(NULL)                                                          →例外│
└──────────────────────────────────────┘
最初の位置がわからないんで例外になってしまうんですね。
分類:C/C++
秀丸マクロ/grep後のソース抽出
2013年03月21日
フォルダ配下をgrepした場合、たまにソースと関係ないファイルもひっかかる時がある
ということで、そういうバイナリファイルとかを除去する秀丸マクロ
(注意)実際に使う場合には、自分の環境合わせて内容を見直してください
      さもなくば本当に必要なソースまで除去されてしまう危険性があります
┌──────────────────────────────────────┐
│// 実行系ファイル                                                           │
│replaceallfast ".*\\.bin\\(.*"              , "", casesense, regular;       │
│replaceallfast ".*\\.cgi\\(.*"              , "", casesense, regular;       │
│replaceallfast ".*\\.dll\\(.*"              , "", casesense, regular;       │
│replaceallfast ".*\\.exe\\(.*"              , "", casesense, regular;       │
│replaceallfast ".*\\.sh\\(.*"               , "", casesense, regular;       │
│                                                                            │
│// 画像系ファイル                                                           │
│replaceallfast ".*\\.ico\\(.*"              , "", casesense, regular;       │
│replaceallfast ".*\\.jpg\\(.*"              , "", casesense, regular;       │
│replaceallfast ".*\\.png\\(.*"              , "", casesense, regular;       │
│                                                                            │
│// データ系                                                                 │
│replaceallfast ".*\\.csv\\(.*"              , "", casesense, regular;       │
│replaceallfast ".*\\.log\\(.*"              , "", casesense, regular;       │
│replaceallfast ".*\\.pdf\\(.*"              , "", casesense, regular;       │
│replaceallfast ".*\\.txt\\(.*"              , "", casesense, regular;       │
│                                                                            │
│// SubVersion                                                               │
│replaceallfast ".*\\.svn.*"                 , "", casesense, regular;       │
│                                                                            │
│// Smarty                                                                   │
│replaceallfast ".*\\\\templates_c\\\\.*"    , "", casesense, regular;       │
│                                                                            │
│// VisualStudio                                                             │
│replaceallfast ".*\\.vcxproj\\(.*"          , "", casesense, regular;       │
│replaceallfast ".*\\.vcxproj\\.filters\\(.*", "", casesense, regular;       │
│replaceallfast ".*\\.cache\\(.*"            , "", casesense, regular;       │
│replaceallfast ".*\\.cs\\(.*"               , "", casesense, regular;       │
│replaceallfast ".*\\.idb\\(.*"              , "", casesense, regular;       │
│replaceallfast ".*\\.ilk\\(.*"              , "", casesense, regular;       │
│replaceallfast ".*\\.ipch\\(.*"             , "", casesense, regular;       │
│replaceallfast ".*\\.lastbuildstate\\(.*"   , "", casesense, regular;       │
│replaceallfast ".*\\.obj\\(.*"              , "", casesense, regular;       │
│replaceallfast ".*\\.pch\\(.*"              , "", casesense, regular;       │
│replaceallfast ".*\\.pdb\\(.*"              , "", casesense, regular;       │
│replaceallfast ".*\\.sdf\\(.*"              , "", casesense, regular;       │
│replaceallfast ".*\\.sln\\(.*"              , "", casesense, regular;       │
│replaceallfast ".*\\.suo\\(.*"              , "", casesense, regular;       │
│replaceallfast ".*\\.tlog\\(.*"             , "", casesense, regular;       │
│                                                                            │
│// その他                                                                   │
│replaceallfast ".*\\.o\\(.*"                , "", casesense, regular;       │
│replaceallfast ".*\\.tmp\\(.*"              , "", casesense, regular;       │
│                                                                            │
│// 空行に置換していたものを最後にまとめて除去                               │
│replaceallfast "^\\n", "", regular;                                         │
└──────────────────────────────────────┘
それぞれ該当する行を空行にして最後に空行を除去するという方式だ
分類:秀丸エディタ
Windows/サンプルバッチ
2013年03月20日
┌──────────────────────────────────────┐
│echo "abc" > t.txt                                                          │
│exit                                                                        │
└──────────────────────────────────────┘
適当な文字をテキストファイルとして出力する場合はこんな感じ。

ちなみにデスクトップで実行されると、デスクトップ上にファイル出力されるが
デスクトップってフォルダと違ってリアルタイムで更新されないらしく、
任意に画面更新(F5押下)しなきゃならないみたい。
分類:Windows
Windows/DOS窓を閉じてこっそり実行(2)
2013年03月19日
VBScriptが使える環境だったら簡単。

VBscript(.vbsの拡張子を付けたテキストファイル)に、以下のように記述。
┌──────────────────────────────────────┐
│Set ws = CreateObject("Wscript.Shell")                                      │
│ws.run "cmd /c xxxx.bat",vbhide                                             │
└──────────────────────────────────────┘
まったく、DOS窓が開かない。
分類:Windows
Windows/DOS窓を閉じてこっそり実行(1)
2013年03月18日
バッチのDOS窓を最小化して実行する方法。
┌──────────────────────────────────────┐
│start /MIN xxxx.bat                                                         │
└──────────────────────────────────────┘
但し、「xxxx.bat」の中身の最後にはDOS窓を閉じるコマンドが必要。
┌──────────────────────────────────────┐
│exit                                                                        │
└──────────────────────────────────────┘
これがないと、最小化して開いたままで残ってしまう。

とはいえ、トリガのバッチを実行する時に、一瞬だけDOS窓が開いてしまうのだけどね。
分類:Windows
TortoiseSVN/コミットしたら即反映・続
2013年03月17日
前回、TortoiseSVNのGUIとしての限界ということで終わったが
「command line client tools」の存在がわかった(インストール方法は別途記載済)ので
こいつを使って自動化してしまう。
┌──────────────────────────────────────┐
│svn export --force "入力元リポジトリ" "出力先"                              │
└──────────────────────────────────────┘
「--force」は既存フォルダ等があっても強制的に上書するオプション。
これがないと既存フォルダがある時に止まってしまう。

一瞬だけDOS窓が開くのは…今のところ解決策なし。
#VBScriptにしようとしたが、それは無理みたい。
分類:SVN
TortoiseSVN/コマンドラインからの実行
2013年03月16日
「svn export…」とかをDOS窓やバッチから実行するには、
「command line client tools」をインストールする必要がある。

この機能は、インストール時に既定でインストールされない設定となっているので
インストール時にチェックを入れてあげる必要がある
┌──────────────────────────────────────┐
│Custom Setup                                                                │
├──────────────────────────────────────┤
│■TortoiseSVN                                                               │
│├■Additional icon sets                                                    │
│├□command line client tools                       ←チェックして有効にする│
│├■Crash Reporter                                                          │
│├■Register diff/patch files                                               │
│├■English(GB) dictionary                                                  │
│└■English(US) dictionary                                                  │
└──────────────────────────────────────┘
既にインストール済みの場合は再度インストーラを実行し「Modify」(修正)を
選べば、上記の画面に進める。

設定後、DOS窓より「svn --version」や「svn help」が実行できればOKだ。
分類:SVN
前へ 1 2 3 次へ