MW211 EXIT

devlog
正規表現/位置により置換内容が異なる方法
2017年03月03日
┌───┬──────────────────────────────────┐
│置換前│①\t②\t③\t④                                                      │
├───┼──────────────────────────────────┤
│置換後│①(②-③)[④]                                                       │
└───┴──────────────────────────────────┘
上記のような置換を行いたい場合、秀丸エディタなら以下で実現できる。
┌──┬───────────────────────────────────┐
│検索│^([^\t]*)\t([^\t]*)\t([^\t]*)\t(.*)$                                  │
├──┼───────────────────────────────────┤
│置換│\1(\2-\3)[\4]                                                         │
└──┴───────────────────────────────────┘
さて、純粋な正規表現で実現できるものか?
分類:秀丸エディタ、正規表現、【未解決】
端数処理後の復元
2017年02月08日
消費税8%の税込金額を税抜金額に変換する際、小数点以下の端数誤差が気になる。

ただ、税込金額を計算する時に端数処理をどうしていたかがわかれば
誤差なく復元が可能なようだ。

  (1) 四捨五入で税込金額を計算していた場合 → (除算後に商を)四捨五入すればOK
  (2) 切り上げで税込金額を計算していた場合 → (除算後に商を)切り捨てすればOK
  (3) 切り捨てで税込金額を計算していた場合 → (除算後に商を)切り上げすればOK

元の金額(税抜金額)を×1.08し、整数となるよう四捨五入する。
それ(税込金額)を÷1.08し、整数となるよう四捨五入する。
するとその結果(再計算した税抜金額)が元の金額と必ず一致する。
→Excelで「1~2097152」まで試してみたが全て一致した
  ┌──────────────────────────────────┐
  │7─(×1.08)→7.56─(四捨五入)→8─(÷1.08)→7.40─(四捨五入)→7(=7)│
  └──────────────────────────────────┘
逆のケース(割ってから掛ける)だと、復元できないものがすぐみつかるのにだ。
  ┌──────────────────────────────────┐
  │7─(÷1.08)→6.48─(四捨五入)→6─(×1.08)→6.48─(四捨五入)→6(≠7)│
  └──────────────────────────────────┘

何か数学的法則性があるのだろうか?
分類:【未解決】
PHP/fread()とチャンクサイズの関係
2013年09月20日
fread()の読込終了条件の一つとして、以下がある。
「バッファつきで読み込まれた、プレーンなファイルでないストリームの場合に、
  一回の読み込みバイト数がチャンクサイズ(通常は 8192)に達した。
  それまでにバッファされていたデータの内容によって、
  返されるデータのサイズはチャンクサイズより大きくなることがあります。」
読みようによっては「fread($fp, 8192);」までしか
第二引数が指定できないように見える。
だけど、実際は結構無制限(PHPのメモリサイズとの相談となる)。
  ・テキストファイル読込時は無制限でOK
  ・URLを指定してHTML読込時も無制限でOK

つまり「バッファつき…ストリームの場合」ってのは結構イレギュラーなケースっぽい。
で、どんなケースなのかというと、「ユーザ定義のストリーム」ってやつを
読み込む時が対象みたい。

「ストリーム」機能って、シーケンシャルに読み込めるものなら
なんでも対象となる便利なPHPの機能っぽいが、今一よくわからない。

引き続き調査。
分類:PHP、【未解決】
PostgreSQL/配列を集約してさらに配列化
2013年01月30日
「ARRAY_AGG()」では配列をさらに配列として集約するのはできないのだろうか。
┌──────────────────────────────────────┐
│SELECT ARRAY_AGG(c) FROM (VALUES (ARRAY[1,2]),(ARRAY[3,4])) AS t(c);        │
└──────────────────────────────────────┘
ってやると以下のエラーがでる。(integer型に限った話ではなくtext型も)
「ERROR:  could not find array type for data type integer[]」

┌──────────────────────────────────────┐
│SELECT ARRAY_AGG(ROW(c)) FROM (VALUES (ARRAY[1,2]),(ARRAY[3,4])) AS t(c);   │
└──────────────────────────────────────┘
ROW式ってやつを使って見ると「{"(\"{1,2}\")","(\"{3,4}\")"}」という結果になる。

┌──────────────────────────────────────┐
│SELECT ARRAY_TO_STRING(ARRAY_AGG(ROW(c)),',')                               │
│    FROM (VALUES (ARRAY[1,2]),(ARRAY[3,4])) AS t(c);                        │
└──────────────────────────────────────┘
で、文字列に変換するとこうなる。「("{1,2}"),("{3,4}")」

配列を配列として集約、多次元配列的になるようだ。

ただし、求めたいのは「{1,2,3,4}」という結果。
一次元の配列にする方法はあるのだろうか?

ま、代案としては、CSV形式の文字列とかにして、最後に配列にするとかか。
分類:PostgreSQL、【未解決】
C/【未解決】strlen()の柔軟性
2012年11月04日
やみくもに「strlen()」を使っていいものか?

末尾の「\0」を探してサイズを算出してくれるんなら
多少大目にサイズが算出されてもいいんじゃない?
#自分の領域にうっかり「\0」がなくても、
  となりの領域に「\0」があればそこまでのサイズを算出してくれそうだし。。。

でも、莫大なサイズだったらどうしよう?
#ってそんなに「\0」が続かない領域ってあるの?

っていうかたまたま全領域の末尾だったら「\0」がなくてってこともありうるなぁ
#全領域の末尾あたりで作業することってそんなにあるのかな?

ってなことを考えた。

もし仮に、「strlen()」をやみくもに使っていいのであれば、
なんだか出自の知れないポインタをとりあえず「strlen()」でサイズを計ってから
処理するってこともできるし。。。

でも、となりの領域に侵入した時点でアウトみたい。
#でも、実験したら場合によりけりみたいだけど(結論的にはアウトなんでしょう)。

正確な情報を知りたいものだ。
分類:C/C++、【未解決】
HTML/ラジオボタンの真偽値
2012年10月03日
┌──────────────────────────────────────┐
│<input type="radio" name="論理型" value="true" />真                         │
│<input type="radio" name="論理型" value="false"/>偽                         │
└──────────────────────────────────────┘
とした場合、
┌──────────────────────────────────────┐
│$取得 = ($_POST['論理型']) ? TRUE : FALSE;                                  │
└──────────────────────────────────────┘
では、どちらもTRUEとなってしまう。
これは「true」「false」ともに文字列とみなされ、空文字以外はTRUEとなるからだ。

┌──────────────────────────────────────┐
│<input type="radio" name="論理型" value="true"/>真                          │
│<input type="radio" name="論理型" value=""    />偽                          │
└──────────────────────────────────────┘
もしくは
┌──────────────────────────────────────┐
│<input type="radio" name="論理型" value="1"/>真                             │
│<input type="radio" name="論理型" value="0"/>偽                             │
└──────────────────────────────────────┘
ならば、正しく判定できる。

┌──────────────────────────────────────┐
│<input type="radio" name="論理型" value="true" />真                         │
│<input type="radio" name="論理型" value="false"/>偽                         │
└──────────────────────────────────────┘
のままで、判定側を以下のようにしてしまうというのもある。
┌──────────────────────────────────────┐
│$取得 = ($_POST['論理型'] === 'true') ? TRUE : FALSE;                       │
└──────────────────────────────────────┘

どれが一番妥当なのだろうか?
分類:HTML、【未解決】
HTML/【未解決】空のGETパラメータ
2012年09月23日
URI上のGETパラメータを空にしても大丈夫なのか?

「index.php?a=1&b&c=3」の「b」みたいな感じで。

「isset($_GET['b'])」で判定できるが、これが正しい形なのかちょっと不安。

「b=true」とかいちいち書くのがめんどうな時に使えそうだが、
ブラウザによってはダメだったりしないのかなぁ?
分類:HTML、【未解決】
HTML/空のspan
2012年09月22日
┌──────────────────────────────────────┐
│<td><span><br/></span></td>                                                 │
└──────────────────────────────────────┘
上記みたいにHTMLに仕込んでおいて、下記のようにそこに文字を表示させる。
┌──────────────────────────────────────┐
│$('span').html('出現');                                                     │
└──────────────────────────────────────┘
こんな場面に遭遇することはないだろうか?

でも、上記の「<span></span>」はHTMLの文法上よくないらしく
HTML Validator様には「警告」をいただくことになる。
中身のないspanはよろしくないのだ。

でもね、大人の事情ってのがあるのだよ、ってことで、こんな風にしてごまかしてみた。
┌──────────────────────────────────────┐
│<td><span><br/></span></td>                                                 │
└──────────────────────────────────────┘
でも、これって一部ブラウザ(IE8とか)で改行されてしまったりする。

こういうのは以下が正しいんだよ、っていう人とはお友達になれないだろう。
┌──────────────────────────────────────┐
│$('td').html('出現');                                                       │
└──────────────────────────────────────┘
spanの中に出したいんだもん。

なんかいい方法はないものやら。
#ご指摘は「エラー」じゃなくて「警告」だから、
  そこら辺の事情はわかってらっしゃるんですかね、HTML Validatorさん
分類:HTML、【未解決】
正規表現/先頭部分のみ置換
2012年09月21日
先頭に0以上の半角スペースが並んでいる文字列について、
先頭の部分の半角スペース二つを全角スペースに置換したい。
もちろん先頭以外の半角スペースは対象外。
(以下、全角スペースを△で表記)
・「   abc」       →○「△ abc」
・「     abc」     →○「△△ abc」
・「   abc  def  」→○「△ abc  def  」
・「   abc  def  」→×「△ abc△def△」
これって、正規表現だけで実現可能なもんなのかね?
分類:正規表現、【未解決】
剰余計算プラス
2012年09月03日
剰余計算で剰余ゼロの場合、割った数が欲しいケースってありますよね。
例えば、3の剰余を求める場合
  1  →  剰余1  →  解1
  2  →  剰余2  →  解2
  3  →  剰余0  →  解3
  4  →  剰余1  →  解1
  5  →  剰余2  →  解2
  6  →  剰余0  →  解3
こんな感じ。
これを行う最適な方法とは?
分類:【未解決】
前へ 1 2 次へ