2012年10月28日日曜日

[JavaScript]正規表現のプロパティ

JavaScriptで正規表現のプロパティから取得できる値のまとめ。

サンプルコート

    var p = /([a-z]+)([0-9]+)/i;

    // 現在の正規表現
    document.writeln('source = ' + p.source);
    // 文字列全体に対してマッチングするか
    document.writeln('global = ' + p.global);
    // 大文字小文字の区別
    document.writeln('ignoreCase = ' + p.ignoreCase);
    // 改行を行末と判断するか
    document.writeln('multiline = ' + p.multiline);

    // 静的なプロパティ
    var ret = 'abc123'.match(p);
    // 入力した値(abc123となる)
    document.writeln('RegExp.input = ' + RegExp.input);
    // グループ化した値の参照($ + グループ化の位置をしめす数字を指定する。)
    document.writeln('RegExp.$1 = ' + RegExp.$1);
    document.writeln('RegExp.$2 = ' + RegExp.$2);

結果

source = ([a-z]+)([0-9]+)
global = false
ignoreCase = true
multiline = false
RegExp.input = abc123
RegExp.$1 = abc
RegExp.$2 = 123

2012年10月18日木曜日

[ruby]ディレクトリ配下のファイルリストを取得

Dir. entriesを使う。

ディレクトリ配下の全ファイル一覧を取得

Dir.entries(".").each do |file| puts file end

結果

.
..
test.rb

一部ファイルの除外する場合

entriesの戻りの配列からdelete_ifで必要ないファイル名を削除する。
Dir.entries(".").delete_if do |file| file =~ /^\./ end.each do |file| puts file end

結果

test.rb

2012年10月7日日曜日

PL/SQLの Autonomous Transactions

AUTONOMOUS_TRANSACTIONプラグマを使用すると自律型のトランザクションを定義できます。
このトランザクションは、メイントランザクションと独立しているので、サブプロシージャないの処理を確実にコミットすることができます。
PL/SQLでログテーブルに書き込むときなどに使えるのではないでしょうか。

この無名PL/SQLは、innerサブプロシージャが自律型のトランザクションとなっています。
自律型トランザクション部分のtest1へのinsert処理は必ずコミットされます。
メイントランザクションではロールバックされるので、testへのinsertは取り消されます。
declare
  procedure inner
  is
    PRAGMA AUTONOMOUS_TRANSACTION;
  begin
    insert into test1 values ('1');
    commit;
  end;
begin
    insert into test values ('1');
    inner;
    rollback;
end;
/

実行前

test、test1ともテーブルは空です。
10:22:39 SQL> select * from test;

no rows selected

Elapsed: 00:00:00.00
10:27:56 SQL> select * from test1;

no rows selected

実行

10:27:43 SQL> r
  1  declare
  2    procedure inner
  3    is
  4  PRAGMA AUTONOMOUS_TRANSACTION;
  5    begin
  6  insert into test1 values ('1');
  7  commit;
  8    end;
  9  begin
 10  insert into test values ('1');
 11  inner;
 12  rollback;
 13* end;

PL/SQL procedure successfully completed.

Elapsed: 00:00:00.04
10:28:07 SQL>

実行後

自律型トランザクションのtest1だけinsertされていることがわかる。
10:28:01 SQL> select * from test;

no rows selected

Elapsed: 00:00:00.00
10:28:21 SQL> select * from test1;

C
-
1

Elapsed: 00:00:00.00
10:28:25 SQL>