MW211 EXIT

devlog
PEAR/Archive_Zipのインストールまとめ
2013年09月10日
【ネット上からインストールする場合】
┌──────────────────────────────────────┐
│C:\Program Files\PHP>pear install Archive_Zip-beta                          │
├──────────────────────────────────────┤
│WARNING: "pear/Archive_Zip" is deprecated in favor of "pecl/zip"            │
│downloading Archive_Zip-0.1.2.tgz ...                                       │
│Starting to download Archive_Zip-0.1.2.tgz (19,213 bytes)                   │
│......done: 19,213 bytes                                                    │
│install ok: channel://pear.php.net/Archive_Zip-0.1.2                        │
└──────────────────────────────────────┘
【ネット上からダウンロードする場合】
┌──────────────────────────────────────┐
│C:\Program Files\PHP>pear download Archive_Zip-beta                         │
├──────────────────────────────────────┤
│WARNING: "pear/Archive_Zip" is deprecated in favor of "pecl/zip"            │
│downloading Archive_Zip-0.1.2.tgz ...                                       │
│Starting to download Archive_Zip-0.1.2.tgz (19,213 bytes)                   │
│......done: 19,213 bytes                                                    │
│File C:\Program Files\PHP\Archive_Zip-0.1.2.tgz downloaded                  │
└──────────────────────────────────────┘
【ダウンロードしたものからインストールする場合】
┌──────────────────────────────────────┐
│C:\Program Files\PHP>pear install Archive_Zip-0.1.2.tgz                     │
├──────────────────────────────────────┤
│WARNING: "pear/Archive_Zip" is deprecated in favor of "pecl/zip"            │
│downloading Archive_Zip-0.1.2.tgz ...                                       │
│Starting to download Archive_Zip-0.1.2.tgz (19,213 bytes)                   │
│......done: 19,213 bytes                                                    │
│install ok: channel://pear.php.net/Archive_Zip-0.1.2                        │
└──────────────────────────────────────┘
【アンインストールする場合】
┌──────────────────────────────────────┐
│C:\Program Files\PHP>pear uninstall Archive_Zip-beta                        │
├──────────────────────────────────────┤
│uninstall ok: channel://pear.php.net/Archive_Zip-0.1.2                      │
└──────────────────────────────────────┘
【インストール状況を確認する場合】
┌──────────────────────────────────────┐
│C:\Program Files\PHP>pear list                                              │
├──────────────────────────────────────┤
│INSTALLED PACKAGES, CHANNEL PEAR.PHP.NET:                                   │
│=========================================                                   │
│PACKAGE          VERSION STATE                                              │
│Archive_Zip      0.1.2   beta                                               │
└──────────────────────────────────────┘
分類:PEAR
正規表現/後方最短一致
2013年09月09日
例えばあるURLの末尾の階層だけを除外したい場合の正規表現による置換を考えた。
つまり「http://aaa/bbb」を「http://aaa」にする置換だ。

まず「/\.*$」が思いつくが、これは最長一致検索となるので
「//aaa/bbb」が該当してしまい(結果が「http:」となり)うまくいかない。

最短一致検索は「?」を使う方法があるが、これは前方にしか使えないらしく
「/\.*?$」だと「//aaa/bbb」が該当してしまう

ということで試行錯誤した結果こんな感じとなることがわかった。
┌──────────────────────────────────────┐
│preg_replace('/\/[^\/]*$/', '', 'http://aaa/bbb');                          │
└──────────────────────────────────────┘

末尾に「/」がついている場合もあるので、この場合はこう。
┌──────────────────────────────────────┐
│preg_replace('/\/[^\/]*\/$/', '', 'http://aaa/bbb/');                       │
└──────────────────────────────────────┘

両方に対応できるようにまとめるとこう。
┌──────────────────────────────────────┐
│preg_replace('/(\/[^\/]*$|\/[^\/]*\/$)/', '', 'http://aaa/bbb/');           │
└──────────────────────────────────────┘

もっとスマートにまとめればこうだ。
┌──────────────────────────────────────┐
│preg_replace('/\/[^\/]*\/?$/', '', 'http://aaa/bbb/');                      │
└──────────────────────────────────────┘

いずれも「http://aaa」になる。

  ┌───┬────────────────────────────────┐
  │置換前│\/[^\/]*\/?$                                                    │
  ├───┼────────────────────────────────┤
  │置換後│                                                          (なし)│
  └───┴────────────────────────────────┘
分類:正規表現
PHP/isset()を複数判定する場合
2013年09月08日
┌──────────────────────────────────────┐
│if ((isset($_POST['a'])) && (isset($_POST['b']))) {                         │
└──────────────────────────────────────┘

「isset()」を複数判定する場合は、「&&」で繋げるのではなく、
第二引数以降に追加していこう。
┌──────────────────────────────────────┐
│if (isset($_POST['a'], $_POST['b'])) {                                      │
└──────────────────────────────────────┘

ま、好き好きですが。
分類:PHP
Apache/「501 Not Implemented」エラー
2013年09月07日
「GET、POST、PUT、DELETE、CONNECT、HEAD、TRACE、PATCH、OPTIONS」以外の
メソッドを実行した場合。
もしくは、サーバ側にそれらのメソッドが実装されていない場合。
#大文字と小文字は区別される(小文字はエラーとなる)ので注意
分類:Apache
JavaScript/比較
2013年09月06日
┌───┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
│      │true│false    1│   0│  -1│'1' │'0' │'-1' '文字' ''  │null│[]  │{}  │NaN │undefined
├───┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤
│true  │ ○ │ × │ △ │ × │ × │ △ │ × │ × │ × │ × │ × │ × │ × │ × │ × │
├───┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤
│false │ × │ ○ │ × │ △ │ × │ × │ △ │ × │ × │ △ │ × │ △ │ × │ × │ × │
├───┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤
│     1│ △ │ × │ ○ │ × │ × │ △ │ × │ × │ × │ × │ × │ × │ × │ × │ × │
├───┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤
│     0│ × │ △ │ × │ ○ │ × │ × │ △ │ × │ × │ △ │ × │ △ │ × │ × │ × │
├───┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤
│    -1│ × │ × │ × │ × │ ○ │ △ │ × │ △ │ × │ × │ × │ × │ × │ × │ × │
├───┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤
│'1'   │ △ │ × │ △ │ × │ △ │ ○ │ × │ △ │ × │ × │ × │ × │ × │ × │ × │
├───┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤
│'0'   │ × │ △ │ × │ △ │ × │ × │ ○ │ × │ × │ × │ × │ × │ × │ × │ × │
├───┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤
│'-1'  │ × │ × │ × │ × │ △ │ △ │ × │ ○ │ × │ × │ × │ × │ × │ × │ × │
├───┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤
│'文字'│ × │ × │ × │ × │ × │ × │ × │ × │ ○ │ × │ × │ × │ × │ × │ × │
├───┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤
│''    │ × │ △ │ × │ △ │ × │ × │ × │ × │ × │ ○ │ × │ △ │ × │ × │ × │
├───┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤
│null  │ × │ × │ × │ × │ × │ × │ × │ × │ × │ × │ ○ │ × │ × │ × │ △ │
├───┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤
│[]    │ × │ △ │ × │ △ │ × │ × │ × │ × │ × │ △ │ × │ ○ │ × │ × │ × │
├───┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤
│{}    │ × │ × │ × │ × │ × │ × │ × │ × │ × │ × │ × │ × │ ○ │ × │ × │
├───┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤
│NaN   │ × │ × │ × │ × │ × │ × │ × │ × │ × │ × │ × │ × │ × │ × │ × │
├───┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤
undefined  × │ × │ × │ × │ × │ × │ × │ × │ × │ × │ △ │ × │ × │ × │ ○ │
└───┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
  ○=厳密な比較で一致、○△=緩やかな比較で一致、×=不一致
分類:JavaScript
ExcelVBA/複数ファイル一括処理
2013年09月05日
フォルダ配下に対象ファイルを置いて、まとめて調査する場合のサンプル。
「★」という文字がみつかったら処理を止める。
一ファイル一シートの場合を対象としている。よってCSVファイルが最適。
┌──────────────────────────────────────┐
│Sub ★検索()                                                                │
│    Dim strPath As String, strFile As String                                │
│    Dim cellFind As Range                                                   │
│    Application.ScreenUpdating = False  '処理中非表示                       │
│    ' ───────────────────────────────────│
│    ' パス入力                                                              │
│    strPath = Application.InputBox( _                                       │
│                Prompt:="パス名を入力してください", _                       │
│                Title:="パス名入力")                                        │
│    If strPath = "False" Or strPath = "" Then                               │
│        MsgBox "検索中止"                                                   │
│        Exit Sub                                                            │
│    End If                                                                  │
│    If Right$(strPath, 1) <> "\" Then                                       │
│        strPath = strPath & "\"                                             │
│    End If                                                                  │
│    ' ───────────────────────────────────│
│    ' パス配下ファイルを全て処理                                            │
│    strFile = Dir(strPath)                                                  │
│    Do While strFile <> ""                                                  │
│        'ファイルのOpen                                                     │
│        Workbooks.Open strPath & strFile                                    │
│        ' ─────────────────────────────────│
│        'ファイル毎の処理                                                   │
│        Set cellFind = Cells.Find(What:="★")                               │
│        If Not cellFind Is Nothing Then                                     │
│            cellFind.Activate                                               │
│            Application.ScreenUpdating = True                               │
│            MsgBox "該当あり"                                               │
│            Exit Sub                                                        │
│        End If                                                              │
│        ' ─────────────────────────────────│
│        'ファイルのClose                                                    │
│        Workbooks.Close                                                     │
│        ' 次のファイルへ                                                    │
│        strFile = Dir                                                       │
│    Loop                                                                    │
│    ' ───────────────────────────────────│
│    Application.ScreenUpdating = True                                       │
│    MsgBox "該当なし"                                                       │
│End Sub                                                                     │
└──────────────────────────────────────┘
分類:ExcelVBA
ExcelVBA/ダラーマーク付き関数
2013年09月04日
文字列操作関数において、末尾に「$」マークが付加されているものを
見かけることはないだろうか?
これは、文字列操作関数を文字列(String型)に特化して使うことを明示しているものだ。
何もつけないと万能型(Variant型)を想定して動作するが、
文字列型に特化した方が対策を限定できるので若干速くなるようだ。
以下がその関数になる。
┌────────────────┬─────────────────────┐
│Chr$()、ChrB$()、ChrW$()        │文字コードからの変換                      │
├────────────────┼─────────────────────┤
│Format$()                       │書式変換                                  │
├────────────────┼─────────────────────┤
│Oct$()、Hex$()                  │8進数、16進数                             │
├────────────────┼─────────────────────┤
│LCase$()、UCase$()              │大文字小文字変換                          │
├────────────────┼─────────────────────┤
│Left$()、Mid$()、Right$()       │文字列の切り出し                          │
│LeftB$()、MidB$()、RightB$()    │                                          │
├────────────────┼─────────────────────┤
│Trim$()、LTrim$()、RTrim$()     │トリム                                    │
├────────────────┼─────────────────────┤
│Environ$()、Error$()、CurDir$() │各種情報                                  │
├────────────────┼─────────────────────┤
│Date$()、Time$()                │日付時刻                                  │
├────────────────┼─────────────────────┤
│Space$()、String$()、Str$()     │その他                                    │
└────────────────┴─────────────────────┘
分類:ExcelVBA
ExcelVBA/抜ける
2013年09月03日
Exit何とかの命令は以下のようなものがある。
┌──────────────────────────────────────┐
│Sub 関数()                                                                  │
│   Exit Sub                                                                 │
│End Sub                                                                     │
├──────────────────────────────────────┤
│Function 関数()                                                             │
│    Exit Function                                                           │
│End Function                                                                │
├──────────────────────────────────────┤
│For i = 1 To 3                                                              │
│    Exit For                                                                │
│Next x                                                                      │
├──────────────────────────────────────┤
│Do                                                                          │
│    Exit Do                                                                 │
│Loop                                                                        │
├──────────────────────────────────────┤
│Exit Property                                                               │
└──────────────────────────────────────┘
分類:ExcelVBA
ExcelVBA/比較
2013年09月02日
数値で比較すると数値に型変換して判定される。
つまり、「If セルの値 = 0」の場合、空欄も真に判定されてしまう。
よって、「0」のみを比較したい場合には、文字列で比較すればよい。
「If セルの値 = "0"」ってことだ。

実際に試してみると、以下のような傾向がある。
┌─────┬───┬───┬───┬───┬───┬───┐
│  比較対象│FALSE │数値0 │文字0 │文字0.0  空欄 │=""   │
│比較方法  │      │書式0.0 '0    │'0.0  │      │      │
├─────┼───┼───┼───┼───┼───┼───┤
│= False   │  ◎  │  ○  │  ○  │  ○  │  ○  │  ×  │
├─────┼───┼───┼───┼───┼───┼───┤
│= 0       │  ○  │  ◎  │  ○  │  ○  │  ○  │  ×  │
├─────┼───┼───┼───┼───┼───┼───┤
│= "0"     │  ×  │  ○  │  ◎  │  ×  │  ×  │  ×  │
├─────┼───┼───┼───┼───┼───┼───┤
│= Empty   │  ○  │  ○  │  ×  │  ×  │  ◎  │  ○  │
├─────┼───┼───┼───┼───┼───┼───┤
│IsEmpty() │  ×  │  ×  │  ×  │  ×  │  ◎  │  ×  │
├─────┼───┼───┼───┼───┼───┼───┤
│= ""      │  ×  │  ×  │  ×  │  ×  │  ◎  │  ○  │
└─────┴───┴───┴───┴───┴───┴───┘
比較対象を論理型、文字型、数値型に換算して比較しているので、
本来想定しているもの以外にも該当するものがでてくるといった感じだ。
少々毛色が違うのが「= Empty」。
これは比較対象の型に自身を換算している感じだ。
よって、数値0の場合は自身を数値0に変換するため一致する一方で
文字列0の場合は、自身は元々文字列""なので不一致となる。

それじゃ文字列の「"0"」と数値の「0」を判別したい場合には?
上記からもわかるように「If セルの値 = Empty」が一つの候補だ。

それ以外に「If WorksheetFunction.IsNumber(セルの値)」で
厳密に「数値0」(真)と「文字列0」(偽)を判別する方法などがある。
分類:ExcelVBA
jQuery/要素の存在チェック
2013年09月01日
セレクタで指定したものが実際にあるのかどうかを判定する方法は
いろいろあるようだ。

但し、一番やりがちな以下はダメです。いずれでも真になってしまいます。
┌──────────────────────────────────────┐
│if ($(セレクタ)) {存在あり;} else {存在なし;}                               │
└──────────────────────────────────────┘

ということで、やり方は以下の通り。
┌──────────────────────────────────────┐
│if ($(セレクタ)[0])              {存在あり;} else {存在なし;}               │
│if ($(セレクタ).get(0))          {存在あり;} else {存在なし;}               │
├──────────────────────────────────────┤
│if ($(セレクタ).length  > 0)     {存在あり;} else {存在なし;}               │
│if ($(セレクタ).size()  > 0)     {存在あり;} else {存在なし;}               │
├──────────────────────────────────────┤
│if ($(セレクタ).is('*') == true) {存在あり;} else {存在なし;}               │
└──────────────────────────────────────┘

「.size()」よりも「.length」が推奨されるので、以下を推奨したいと思う。
┌──────────────────────────────────────┐
│if ($(セレクタ).length > 0) {存在あり;} else {存在なし;}                    │
└──────────────────────────────────────┘
分類:jQuery
前へ 1 2 3 次へ