MW211 EXIT

devlog
PHP/SimpleXMLでXML文字列を操作
2017年05月01日
まず、以下のような感じで文字列を作成し、
SimpleXMLElementクラスのコンストラクタに代入する。
┌──────────────────────────────────────┐
│$xmldecl = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>';       │
│$xmldata = <<<___XML___                                                     │
│<xml>                                                                       │
│  <data1>                                                                   │
│    <data2>ABC</data2>                                                      │
│  </data1>                                                                  │
│</xml>                                                                      │
│                                                                            │
│___XML___;                                                                  │
│$xml = new SimpleXMLElement($xmldecl . $xmldata);                           │
└──────────────────────────────────────┘
すると、インスタンス「$xml」にXML形式のデータが格納されるので
タグ名を用いたプロパティ名を駆使して、操作する。

まずは、個別に項目の値を参照する方法。
┌──────────────────────────────────────┐
│echo $xml->data1[0]->data2;                                      //→「ABC」│
└──────────────────────────────────────┘
プロパティを参照するだけ。

全ての内容をXML形式でWeb画面に表示する方法。
┌──────────────────────────────────────┐
│echo '<pre>';                                                               │
│echo htmlspecialchars($xml->asXML());                                       │
│echo '</pre>';                                                              │
└──────────────────────────────────────┘
「asXML()」メソッドで全出力。
これに加えて「htmlspecialchars()」でエスケープし「<pre>」タグで囲う。

XML形式として割り切って使用する(他と連動させたりしない)場合には
「header()」と組み合わせて、以下も可。
┌──────────────────────────────────────┐
│header('Content-type:application/xml; charset=UTF-8');                      │
│echo $xml->asXML();                                                         │
└──────────────────────────────────────┘

項目内容を書き替えるには、プロパティに値を代入すればよい。
┌──────────────────────────────────────┐
│$xml->data1[0]->data2 = 'XYZ';                                              │
│echo $xml->data1[0]->data2;                                      //→「XYZ」│
└──────────────────────────────────────┘
分類:PHP
ExcelVBA/セルの範囲が広いと思ったら
2017年03月04日
┌──────────────────────────────────────┐
│Public Sub セルの範囲が広いと思ったら()                                     │
│    MsgBox ThisWorkbook.ActiveSheet.UsedRange.Row   ' ダミー処理            │
│End Sub                                                                     │
└──────────────────────────────────────┘
分類:ExcelVBA
正規表現/位置により置換内容が異なる方法
2017年03月03日
┌───┬──────────────────────────────────┐
│置換前│①\t②\t③\t④                                                      │
├───┼──────────────────────────────────┤
│置換後│①(②-③)[④]                                                       │
└───┴──────────────────────────────────┘
上記のような置換を行いたい場合、秀丸エディタなら以下で実現できる。
┌──┬───────────────────────────────────┐
│検索│^([^\t]*)\t([^\t]*)\t([^\t]*)\t(.*)$                                  │
├──┼───────────────────────────────────┤
│置換│\1(\2-\3)[\4]                                                         │
└──┴───────────────────────────────────┘
さて、純粋な正規表現で実現できるものか?
分類:秀丸エディタ、正規表現、【未解決】
robots.txt
2017年03月02日
ロボット型検索エンジンに対する命令を記述するためのファイル名。
「robots.txt」
分類:IT全般
正規表現/(行末以外の)$はエスケープ不要
2017年02月23日
行末の「$」は、末尾の時だけ行末の「$」となる。
つまり「$」の後ろに文字を続けると行末の「$」でなくなる。
よって「\$」みたいなエスケープは不要(あってもよいけど)。
例)「abc$efg」の「$e」は、「\$e」でも「$e」でも検索可能

但し、行末の「$」は見分けが付かないのでやっぱりエスケープ必要。
例)「abc$」の「c$」は、「c\$」か「c\$$」か「c$$」かで検索可能
分類:正規表現
Apache/Apache2.4をIEで見るとレスポンスが悪い
2017年02月18日
【現象】
  Apache2.4でPHPを動作させているとたまにレスポンスが悪くなる。
【原因】
  IE(IE10/11)の場合、リクエストを投げるとそれに対するレスポンスはするが、
  それ以降のレスポンスが返らなくなる。
  Windows NT向けに最適化されたマルチプロセスモジュール(のバグ?)が原因。
【解決方法】
  原因を切ってしまう。
  Apache設定ファイル「extra/httpd-mpm.conf」の以下セクションに以下を追記する。
┌──────────────────────────────────────┐
│<IfModule mpm_winnt_module>                                                 │
│    AcceptFilter http none                                                  │
│    AcceptFilter https none                                                 │
│</IfModule>                                                                 │
└──────────────────────────────────────┘
  「httpd.conf」に追記してもいけるようだが
  マルチプロセッサモジュール(mpm)に起因する問題なので、こっちが適切か。
分類:Apache
JavaScript/正規表現の変数化
2017年02月16日
┌──────────────────────────────────────┐
│文字.match(/\d/)                                                            │
└──────────────────────────────────────┘
上記のような正規表現(一致判定)があった場合に、「\d」の部分を変数化する方法。

単純に以下みたいなのはダメ。(「/」で囲っているのは単なる文字列ではない)
┌──────────────────────────────────────┐
│var str = '\d';                                                             │
│文字.match(/ + str + /)                                                     │
└──────────────────────────────────────┘

下記のように正規表現オブジェクトにしてあげるのが正解。
┌──────────────────────────────────────┐
│var str = '\\d';                                                            │
│var reg = new RegExp(str);                                                  │
│文字.match(reg)                                                             │
└──────────────────────────────────────┘
ただし、注意すべきなのは「\」が(「/」で囲う場合はそのままでいいが)
文字列となると「\\」で表記しなければならない点。

代入後、(「str」を)を「\」→「\\」に置換すれば、意識しなくても済むかと思ったが
代入の時点で「\」が落ちてしまうので置換が効かない。
分類:JavaScript
PHP配列/添字配列を連想配列に変換
2017年02月14日
添字配列から、keyとvalueが同じ連想配列を生成するスマートな方法。
「array_combine()」を用いる。(第一引数がkeyに第二引数がvalueになる)
┌──────────────────────────────────────┐
│$a = [                                                  ┌────────┐│
│    'a',                                                │array(3) {      ││
│    'b',                                                │  ["a"]=>       ││
│    'c',                                                │  string(1) "a" ││
│];                                                      │  ["b"]=>       ││
│$aa = array_combine($a, $a);                            │  string(1) "b" ││
│var_dump($aa);  //──────────────────→│  ["c"]=>       ││
└────────────────────────────│  string(1) "c" │┘
                                                          │}               │
                                                          └────────┘
なお、添字配列内に重複したデータがあった場合には、
重複分は無視される(一つにまとめられる)。

もっと、他にスマートな方法がありそうだが。
分類:PHP配列
jQuery/追加直後にイベント発生
2017年02月13日
jQueryで「.append()」メソッドで追加した要素にイベントを仕込んでおいて
追加した直後に(初期表示のため)まず一回イベントを発生させる方法の例。
┌──────────────────────────────────────┐
│var newTd = $('<td>')                                                       │
│    .append($('<select>')                                                   │
│        .html(                                                              │
│            '<option value="0" selected="selected">-<\/option>'            │
│          + '<option value="1">○<\/option>'                                │
│          + '<option value="2">×<\/option>'                                │
│        )                                                                   │
│        .bind('change', function() {                                        │
│            if ($(this).val() == 0) {                                       │
│                $(this).closest('tr').css({'backgroundColor':'#C0C0C0'});   │
│            } else {                                                        │
│                $(this).closest('tr').css({'backgroundColor':'#FFFFFF'});   │
│            }                                                               │
│        })                                                                  │
│    );                                                                      │
│$('#tr').append(newTd);                                                     │
│newTd.ready(function() {                                                    │
│    $(this).change();                                                       │
│});                                                                         │
└──────────────────────────────────────┘
追加要素は非同期で追加が行われるためそれが完了した直後に(完了するまで待って)
イベントを実行させればよい。
待つためのものが「.ready()」メソッドである。
また、「.change()」メソッドを単独で実行すれば、
任意にchangeイベントを発生させることができる。
分類:jQuery
正規表現/括弧のネスト
2017年02月11日
括弧の最初から最後まで最短一致検索でヒットさせるには
以下のような正規表現を用いることになる。
┌──────────────────────────────────────┐
│\(.*?\)                                                                     │
└──────────────────────────────────────┘
しかし、ネストしていた場合(「(本日(晴))」みたいやつ)は全部をヒットできない。

一回までのネストなら以下の正規表現でヒットできる。
┌──────────────────────────────────────┐
│\(([^\(^\)]|(\([^\)]*\)))*\)                                                │
└──────────────────────────────────────┘
分類:正規表現
前へ 1 … 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 … 156 次へ