ADP
Programming Language ADP

Japanese

Freecode

Sourceforge.net

SourceForge.JP

Loading

Library alphabetical list

This section describes the ADP embedded predicate, library, in alphabetical order.

! (カット)


_cookie (cookieのセット)


形式
 _cookie( $name, $value, $expires, $domain, $path, $secure)
引数
  • $name : 名前
  • $value : 値
  • $expires : 有効期限(省略可)
  • $domain : ドメイン(省略可)
  • $path : パス(省略可)
  • $secure : secureフラグ(省略可)
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明
AWPモード時に、cookie使用時に使用します。レスポンスヘッダにSet-cookie:ヘッダとして設定されます。

_db_quote (SQL生成時のクオート文字の指定)


形式
 _db_quote($db, $quote_s, $quote_e)
引数
  • $db: 接続文字列
  • $quote_s: クオート開始文字
  • $quote_e: クオート終了文字(省略可)
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明
 ODBC接続文字列については、DBライブラリを参照下さい。
 DBライブラリで、SQLを自動生成する述語(select / insert / update / delete / save )が付与するテーブルクオート文字を$dbで指定された接続文字列の接続に対して設定します。デフォルトは `(バッククオート)になります(_db_default_quote述語でデフォルトクオートが変更できます)。
デフォルト状態で、select述語等が生成するSQLでテーブル部分が ` でクオートされます。
select * from `tablename`
SQL Server 2008ではバッククオートがテーブルクオート文字として使用できませんので、本述語を用いて、クオート文字を変更します。

,_db_quote( $db, '[',']');

例では、テーブル名が[](かぎ括弧)で囲まれます。
select * from [tablename]

クオート文字をデフォルト状態に戻すときは以下のようにします。
,_db_quote( $db, '`');

引数2つで_db_quoteを呼び出しますと、クオートの開始文字と終了文字が同じ文字で設定されます。

 ※Ver0.75から追加になります。

_db_default_quote (SQL生成時のクオート文字のデフォルト値の設定)


形式
 _db_default_quote( $quote_s, $quote_e)
引数
  • $quote_s: クオート開始文字
  • $quote_e: クオート終了文字(省略可)
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明
 DBライブラリで、SQLを自動生成する述語(select / insert / update / delete / save )が付与するクオート文字を設定します。デフォルトは `(バッククオート)になりま。
デフォルト状態で、select述語等が生成するSQLでテーブル部分が ` でクオートされます。
select * from `tablename`
SQL Server 2008ではバッククオートがテーブルクオート文字として使用できませんので、本述語を用いて、クオート文字を変更します。
特定の接続のみクオート文字列を変更する場合は、_db_quote述語を使用します。

,_db_default_quote( $db, '[',']');

例では、テーブル名が[](かぎ括弧)で囲まれます。
select * from [tablename]

クオート文字をデフォルト状態に戻すときは以下のようにします。
,_db_default_quote( $db, '`');

引数2つで_db_default_quoteを呼び出しますと、クオートの開始文字と終了文字が同じ文字で設定されます。

 ※Ver0.75から追加になります。

_global (グローバル変数の値設定)


形式
 _global( $item, $key)
引数
  • $item: 変数にセットする値
  • $key: 変数の名前(キー)
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。

説明
$keyで指定された名前のグローバル変数に値をセットします。

コード例(lib/global.p)
,$a = 10 ,_global($a,'hoge');
,$a = 30 ,global('hoge').prt;

実行例
D:\sample\lib>adp global.p
10

_session (セッション変数の値設定)


形式
 _session( $item, $key)
引数
  • $item: 変数にセットする値
  • $key: 変数の名前(キー)
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。

説明
$keyで指定された名前のセッション変数に値をセットします。
セッション変数は、セッションIDをキーにして保存される変数です。
テンポラリディレクトリにセッションIDをキーとしたファイルが作成され、そのファイルにセッション変数の実体が格納されます。
AWPモード時には、HTTPヘッダにセッションIDがSet-Cookieにて返されます。
コマンドモード時には、adpコマンドの引数に-s オプションを付けることによりセッションIDが確認できます。そのIDを環境変数ADP_SESSION_ID_STRINGで指定するとセッションを引き継ぐことができます。

コード例(lib/session.p)
,$a = 10 ,_session($a,'hoge');
,$a = 30 ,session('hoge').prtn;

実行例
D:\sample\lib>adp session.p
10
ADP_SESSION_ID_STRING=66A1F1F96DA12E9E5DC9819B472EDB4B71ABBB44

_session_cookie (セッションIDクッキーのパラメータ設定)


形式
 __session_cookie( $name, $value, $expires, $domain, $path, $secure)
引数
  • $expires : 有効期限
  • $domain : ドメイン
  • $path : パス
  • $secure : secureフラグ
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明
AWPモード時に返されるクッキーの有効期限・ドメイン・パス・secureフラグを変更します。デフォルトではこれらは全て省略(空)になっています。
値はなからず指定しなければなりませんが、省略する場合は''(空文字列)を指定します。
※Cookieの名前は、'ADP_SESSION_ID_STRING'で、値はセッションIDとなっています。

_table_quote (テーブルクオート文字の設定) - deleted


形式
 _table_quote( $quote_s, $quote_e)
引数
  • $quote_s: テーブルクオート開始文字
  • $quote_e: テーブルクオート終了文字(省略可)
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明

※Ver 0.75から削除されました。_db_quote述語または_db_default_quote述語を使用してください。

 DBライブラリで、SQLを自動生成する述語(select / insert / update / delete / save )が付与するテーブルクオート文字を設定します。デフォルトは `(バッククオート)になります。
デフォルト状態で、select述語等が生成するSQLでテーブル部分が ` でクオートされます。
select * from `tablename`
SQL Server 2008ではバッククオートがテーブルクオート文字として使用できませんので、本述語を用いて、クオート文字を変更します。

,_table_quote('[',']');

例では、テーブル名が[](かぎ括弧)で囲まれます。
select * from [tablename]

クオート文字をデフォルト状態に戻すときは以下のようにします。
,_table_quote('`');

引数一つで_table_quoteを呼び出しますと、クオートの開始文字と終了文字が同じ文字で設定されます。

_temp_path (テンポラリファイルの作成)

形式
 _temp_path( $head, $path)
引数
  • $head: テンポラリパスの接頭辞
  • $path: 結果
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明
■Windows上での動作
 GetTempPath APIで取得されるテンポラリディレクトリに、GetTempFileName APIでテンポラリファイルを作成しパスを$pathへ返します。
$headはテンポラリファイルの接頭辞になります。

■Unix/Linuxでの動作
 環境変数TMPDIRで取得されるテンポラリディレクトリ(無ければ/tmp)に、mkstemp システムコールでテンポラリファイルを作成します。
$headはテンポラリファイルの接頭辞になります。mkstempに渡すときのファイル名で'XXXXXX'は自動的に付与される($head+'XXXXXX'が渡される)。

add_response_header (HTTPレスポンスヘッダの追加)

形式
 add_response_header($header)
引数
  • $header:追加するヘッダ
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明
AWPモード時に使用します。$headerで指定した値をHTTPのレスポンスヘッダに追加します。

apachelog (apacheログファイルの読み込み)

形式
 apachelog($filepath,@result)
引数
  • $filepath:ログファイルパス
  • @result:ログ内容
完了時の動作
  • ログファイル内にログ(行)が存在する時:次の述語を実行に移ります。
  • ログファイル内にログ(行)が存在しない時:バックトラックします。
バックトラック時の動作
  • ログファイル内に次のログ(行)が存在する時:次の述語を実行に移ります。
  • ログファイル内に次のログ(行)が存在しない時:バックトラックします。
説明
apacheの標準のログ形式を読み込みます。
結果を配列で取得します。

コード例(lib/apache.p)
,apachelog@('access_log').csv.prtn,next;

実行例
D:\sample\lib>adp apache_log.p
::1,-,-,24/Apr/2011:06:25:06 +0000,OPTIONS * HTTP/1.0,200,-,-,Apache/2.2.9 (Debi
an) PHP/5.2.6-1+lenny9 with Suhosin-Patch (internal dummy connection)
192.168.1.100,-,-,24/Apr/2011:06:29:08 +0000,GET / HTTP/1.0,200,28251,-,Wget/1.1
1.4 Red Hat modified
192.168.1.101,-,-,24/Apr/2011:06:30:42 +0000,GET /doc.awp?PID=678 HTTP/1.1,200,3
548,-,Yeti/1.0 (NHN Corp.; http://help.naver.com/robots/)
192.168.1.102,-,-,24/Apr/2011:06:33:00 +0000,GET /?p=12 HTTP/1.1,200,3826,http:/
/www.google.co.jp/search?source=ig&hl=ja&rlz=1G1GGLQ_JAJP351&q=c%2B%2B+csv+%E8%A
A%AD%E3%81%BF%E8%BE%BC%E3%81%BF&aq=1&aqi=g10&aql=&oq=c%2B%2B+csv,"Mozilla/5.0 (W
indows; U; Windows NT 6.0; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/
10.0.648.205 Safari/534.16"
192.168.1.103,-,-,24/Apr/2011:06:33:37 +0000,GET /robots.txt HTTP/1.1,404,321,-,
Yeti/1.0 (NHN Corp.; http://help.naver.com/robots/)

arg (コマンドライン引数の取得)

形式
 arg($filepath,$value)
引数
  • $pos:引数の順番(0から)
  • $value:引数の値(結果)
完了時の動作
  • 引数が存在する時:次の述語を実行に移ります。
  • 引数が存在しない時:バックトラックします。
バックトラック時の動作
  • 次の引数が存在する時:次の述語を実行に移ります。
  • 次の引数が存在しない時:バックトラックします。
説明
コマンドライン引数(adpコマンドでオプション -A 以降の引数)を取得します。
$posには欲しい引数の順番(0から)を指定する他、変数を指定すると全引数取得に現在の順番を取得することも出来ます。

コード例(lib/arg.p)
,arg(3,$value),prtn("pos3は:",$value);
,arg($pos,$value),prtn($pos,":",$value),next;

実行例
D:\sample\lib>adp arg.p -A い ろ は に ほ
pos3は:に
0:い
1:ろ
2:は
3:に
4:ほ

ascii (文字コードの取得)

形式
 ascii( $str, $value)
引数
  • $str: 文字コードを取得する文字
  • $value: 結果(文字コードの値)
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明
 指定された文字列の先頭バイトの文字コードを取得します。
注)バイト単位で返しますので漢字コード等の複数バイトにまたがる文字に関しては複数回に分けて
asciiを呼び出す必要があります。

コード例(lib/ascii.p)
,ascii('A').prt;

実行例
D:\sample\lib>adp ascii.p
65

bload (ADPバイナリデータの読み込み)


形式
 bload( $filepath, $data)
引数
  • $filepath: バイナリデータファイル名
  • $data: バイナリデータ(結果)
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明
 $filepathで指定されたバイナリデータを読み込み、$dataに格納します。バイナリデータはあらかじめ、bsave述語で保存する必要があります。

コード例(lib/bload.p)
,$x = { '東京', '神奈川', '埼玉', '千葉'} ,bsave($x, 'bloadtest.adb');
,bload('bloadtest.adb').csv.prt;

実行結果
D:\sample\lib>adp bload.p
東京,神奈川,埼玉,千葉
D:\sample\lib>type bloadtest.adb
+ADP0040BIN_117                 

bsave (バイナリデータの書き出し)


形式
 bsave( $data, $filepath)
引数
  • $data: バイナリデータ
  • $filepath: バイナリデータファイル名
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明
$filepathで指定されたファイルに、$dataの内容をバイナリ形式で格納します。格納したデータは、bload述語を使うことにより読み込めます。

コード例(lib/bload.p)
,$x = { '東京', '神奈川', '埼玉', '千葉'} ,bsave($x, 'bloadtest.adb');
,bload('bloadtest.adb').csv.prt;

実行結果
D:\sample\lib>adp bload.p
東京,神奈川,埼玉,千葉
D:\sample\lib>type bloadtest.adb
+ADP0040BIN_117                 

cat (文字列の結合)

形式
 cat( $src, ..., $dst)
引数
  • $src: 結合する文字列(複数可)
  • $dst: 結果
完了時の動作
  • 正常時:次の述語を実行に移ります。
  • 異常時:バックトラックします。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明
文字列を結合します。結合する文字列を指定します。最後の引数に結果が格納されます。
引数に無効な値(文字列に変換できない)を指定するとバックトラックします。

コード例 (lib/cat.p)
,cat( 'This ', 'is ', 'a ', 'pen.').prt;

実行例
D:\sample\lib>adp cat.p
This is a pen.

catch (例外のコールバック)

形式
 catch({ :class=> $class, :message => $message , :at => $at, :in => $in})
引数
  • $class: 例外クラス
  • $message: 例外メッセージ
  • $at: 例外発生場所(評価述語)
  • $in: 例外発生場所(評価ホーン節)
完了時の動作
  • 常に成功を返します。catch述語以降の述語は実行されません。バックトラックもしません。
バックトラック時の動作
  • 常に偽を返します。
説明
 例外の受信を行います。

chr (文字コードから文字の取得)

形式
 chr( $code, $value)
引数
  • $code: 文字コード値
  • $value: 結果(文字コードが示す文字)
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明
 指定された文字コードの文字を返します。0?255で指定する必要があります。これ以上のサイズの文字コードは分割して設定する必要があります。文字コードの正当性のチェック等は行いません。

コード例(lib/chr.p)
,chr(0x41).prt;

実行例
D:\sample\lib>adp chr.p
A

cmp (比較)

形式
 cmp( $src, $dst)
引数
  • $str: 比較元
  • $dst: 比較先
  • $result: 結果
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明
 $src,$dstが共に数値の場合、$src > $dstなら 1を、$src < $dstなら -1を、それ以外なら0を返します。
 $src,$dstが文字列の場合、$src > $dstなら正の値を、$src < $dstなら 負の値を、それ以外なら0を返します(strcmpを呼び出して比較を行います)。

比較演算子では比較結果で次の述語の実行またはバックトラックを行いますが、cmpは比較結果を変数に代入します。バックトラックはせずに常に次の述語の実行に移ります。

コード例(lib/cmp.p)
,cmp(10,10).prtn;
,cmp("ZZZZ","aaaa").prtn;

実行例
D:\sample\lib>adp cmp.p
0
-1

columns (カラム定義の取得)

形式
 columns($constr, $tablename,@result)
引数
  • $constr: ODBC接続文字列
  • $tablename:定義情報を取得するテーブル名
  • @result:定義情報
完了時の動作
  • カラムが存在する時:次の述語を実行に移ります。
  • カラムが存在しない時:バックトラックします。
バックトラック時の動作
  • 次のカラムが存在する時:次の述語を実行に移ります。
  • 次のカラムが存在しない時:バックトラックします。
  • ※テーブルに定義されているカラムの数(-1)だけバックトラックします。
説明
 ODBC接続文字列については、DBライブラリを参照下さい。
ODBC APIのSQLColumnsを呼び出してテーブルに含まれるカラム情報を取得します。

※返される値についてはODBCドライバにより代わる場合があります。
※SQLiteでは動作しません。

コード例(lib/columns.p - Windows32ビットモードでのみ有効)
+con("Driver={Microsoft Access Driver (*.mdb)}; DBQ=sample.mdb");
,con.columns("sample_table",@x),prtn(@x:COLUMN_NAME,":",@x:TYPE_NAME),next;

実行例
D:\sample\lib>adp columns.p
ID:COUNTER
col1:VARCHAR
col2:INTEGER
col3:DATETIME

commit (DBのコミットを行う)

形式
 commit($constr)
引数
  • $constr:ODBC接続文字列
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明
 ODBC接続文字列については、DBライブラリを参照下さい。
 指定された接続文字列のDB接続のコミットを行います。
現在のバージョンでは、DBへの接続は、接続文字列毎に管理されます。
接続文字列が同じ場合は同一の接続になり、異なる場合は違う接続となります。
デフォルトでは、DBに対する操作はオートコミットOFFになっています。
DBに対する変更を行った場合、commitを呼び出さないと結果が反映されません。

cookie (クッキー値の取得)


形式
 cookie( $name, $value)
引数
  • $name: クッキー名
  • $value: クッキー値(結果)
完了時の動作
  • $nameのクッキーが存在する時:次の述語を実行に移ります。
  • $nameのクッキーが存在しない時:バックトラックします。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明
AWPモード時に使用します。$nameで指定されたクッキーの値を取得します。

※Ver0.69までは、$nameで指定されたクッキー値が存在しないときは$valueにNILを返しましたが、Ver0.70では、上記のとおりバックトラックします。値がない場合にバックトラックさせない場合は、?ポストフィックスを使用します。

counter (ループを作る)


形式
 counter( $start, $skip, $end, $counter)
引数
  • $start: ループの初期値
  • $skip: SKIP値
  • $end: 終了値
  • $counter: カウンタ値(結果)
完了時の動作
  • 通常時:次の述語を実行に移ります。
  • $start,$skip,$endが矛盾する時:バックトラックします。
バックトラック時の動作
  • カウント時:次の述語を実行に移ります。
  • カウント終了時:バックトラックします。
説明
 ループを構成する述語です。BASICやC言語のfor文に相当します。
$startを初期値として与えられ、ループをする(バックトラックする)毎に$skipが加算され、$endを超えた段階でループが終了(バックトラック)します。
ループ中$counterに現在のカウンター値が入ります。$start,$skip,$endの値により$counterに$endの値が入ることがあります(例 $start:1, $skip:1, $end:10の時、$counterには1から10の値が入ります)。
$start,$skip,$endが矛盾する場合(例 $start:1, $skip:-1, $end:10の時、$startに$skipをいくら足しても$endに到達しない)は、即座にバックトラックします。

※counter述語を使ってループを構成する場合、next述語と組み合わせて使用します。

コード例(lib/counter.p)
,prtn('start')
  ,counter(1, 1, 10, $c)
  ,prtn($c)
  ,next
  ,prtn('end')
;

実行例
D:\sample\lib>adp counter.p
start
1
2
3
4
5
6
7
8
9
10
end


csv (CSV形式への変換)

形式
 csv( $src, ..., $dst)
引数
  • $src: 変換する文字列(複数可)
  • $dst: 結果
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明
$srcで指定された項をCSV形式に変換します。変換する項を指定します。複数指定できます。最後の引数に結果が格納されます。
各項は、, (カンマ)を区切り文字として結合されます。また項の中の文字列中にカンマがある場合、項全体を " (ダブルクオート)で囲います。文字列中にダブルクオートがある場合、項全体をダブルクオートで囲い、値の"は""に変換されます。

コード例 (lib/csv.p)
,$a = { 10, 'aa', 'b"b' }, csv($a, 'AA', $r), $r.prtn;

実行例
D:\sample\lib>adp csv.p
10,aa,"b""b",AA

ctimestr (時刻表記の変換)

形式
 ctimestr( $input, $scanfmt, $outputfmt, $output)
引数
  • $input: 入力文字列
  • $scanfmt: 入力文字の日付、時刻フォーマット
  • $outputfmt: 出力文字の日付、時刻フォーマット
  • $output: 出力文字列
完了時の動作
  • 変換成功:次の述語を実行に移ります。
  • 変換失敗:input文字列がscanfmtで指定された形式で変換できない場合、バックトラックします。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明
 $inputで入っている時刻の形式を変換し$outputへ格納します。$scanfmtは入力文字列の形式を指定します。$outputfmtは出力文字列の形式を指定します。
$scanfmtの指定はC言語のscanfの様に,%に続けて書式指定文字を指定します。それ以外の文字は入力文字列に一致させる必要があります。,$outputfmtの指定はC言語のprintfのように%に続けて書式指定文字を指定します。それ以外の文字はそのまま出力されます。
書式指定文字は以下のとおりです。

書式記号説明
%a週(英略記) Sun, Mon, Tue, Wed, Thu, Fri, Sat
%b月(英略記) Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec
%d日 01~31
%H時間 00~24
%m月(数字)01~12
%M分 00~59
%S秒 00~59
%w週(数字) 0~6
%Y年 0000~9999
%%%自身を表す
  
日、月、分、秒に関してですが、1桁の値の場合出力時は0を付与されます(2の場合、02のように出力されます)。入力に関しては0がついている必要はありません(02でも2でも構いません)。

コード例(lib/ctimestr.p)

,$t == 'Sat, 21 May 2011 14:58:41 +0000'
,$inp_fmt == '%a, %d %b %Y %H:%M:%S'
,$out_fmt == '%Y-%m-%d %H:%M:%S'
,ctimestr( $t, $inp_fmt, $out_fmt).prtn;

実行例

D:\sample\lib>adp ctimestr.p
2011-05-21 14:58:41

dbl (実数への変換)

形式
 dbl( $src, $dst)
引数
  • $src: 変換元
  • $dst: 結果
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明
$srcで指定された値を実数へ変換し$dstへ格納します。$srcは文字列と共に整数、実数自身も指定できます。
$srcがNILの場合、$dstにNILを格納します(*Ver0.81以降)。

コード例 (lib/dbl.p)
,dbl('10.5').prtn;
,dbl(20.3).prtn;

実行例
D:\sample\lib>adp dbl.p
10.500000
20.300000

debug (デバック文の出力)

形式
 debug( $src, ...)
引数
  • $src: 出力する変数(複数可)
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明
デバッグで使用します。変数の名前と共に値を標準エラーに出力します。
その他内部情報(変数の割り付けられているアドレス、変数のインデックス)も出力します。

コード例 (lib/debug.p)
,$a == 1, $b == 'test', debugn( $a, $b);
,$a == 2, $b == 'test2', debug( $a, $b);

実行例
D:\sample\lib>adp debug.p
a(0),=1
b(1),=test

a(0),=2
b(1),=test2

debugn (デバック文の出力)

形式
 debugn( $src, ...)
引数
  • $src: 出力する変数(複数可)
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明
デバッグで使用します。変数の名前と共に値を標準エラーに出力します。
その他内部情報(変数の割り付けられているアドレス、変数のインデックス)も出力します。
最後に改行を出力します。

コード例 (lib/debug.p)
,$a == 1, $b == 'test', debugn( $a, $b);
,$a == 2, $b == 'test2', debug( $a, $b);

実行例
D:\sample\lib>adp debug.p
a(0),=1
b(1),=test

a(0),=2
b(1),=test2

delete (テーブルレコードの削除)

形式
 delete($constr, $wherefilter, $tablename)
引数
  • $constr: ODBC接続文字列
  • $wherefilter: 条件カラム・値マップ
  • $tablename: テーブル名
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明
 ODBC接続文字列については、DBライブラリを参照下さい。
 指定された条件($wherefilter)で、指定されたテーブル($tablename)のレコードを削除します。
$wherefilterは、以下のように、連想配列でキー部分にカラム名、値部分にそのカラムの値を指定します。
キー値のペアは複数指定できます。複数指定するとANDで結ばれます。
{ 'colname1' => value1, 'colname2' => value2 ... }
以下のようなSQLに変換されます。

 DELETE FROM tablename WHERE colname1 = value1 AND colname2 = value2 ... 

上記以外の条件式(数値で代償比較演算子を使用したい。OR条件を付与したい等)を指定したい場合は、SQL述語を使用します。

他のDBライブラリの述語やクエリー変数を返す述語等、連想配列を返す述語の結果を用いて、本述語を呼び出すことが考えられます。
その場合、ある連想配列から特定のキーを持った連想配列を新しく作成したい場合があります。この場合、lsmap述語を使用します。
そのほか、キーの値を変更しながら新しい連想配列を作成したい場合は、remap述語を使用します。
searchの戻り値等、通常の配列から連想配列を作成する場合は、mkmap述語を使用します。

DBライブラリのサンプル

each (リスト・配列からの要素の取得)


形式
 each( $array,...,$item,...)
引数
  • $array: リスト・配列(複数可)
  • $item 取り出された要素(結果、複数可)
完了時の動作
  • リスト・配列内に要素がある場合:次の述語を実行に移ります。
  • リスト・配列内に要素が無い場合:バックトラックします。
バックトラック時の動作
  • リスト・配列内に次の要素がある場合:次の述語を実行に移ります。
  • リスト・配列内に次の要素が無い場合:バックトラックします。
説明
 $arrayに示されたリスト・配列内の要素を一つずつ取り出し$itemに格納します。他の言語に見られるeachと同様の述語です。
複数のリストを同時に指定することにより、同時に1つずつ取り出すことが出来ます(例を参照)。
リスト・配列の要素の数が同一でない場合は、短い方の要素はNILで埋められます。

※each述語を使ってループを構成する場合、next述語と組み合わせて使用します。

コード例1(lib/each1.p)
,each({ 'a', 'b', 'c'}, $item), prtn($item), next;
実行例1
D:\sample\lib>adp each1.p
a
b
c

コード例2(lib/each2.p)
,each({ 1, 2, 3, 4}, { 'A', 'B', 'C'}, $item1, $item2)
  ,prtn($item1,':',$item2)
  ,next;
実行例2
D:\sample\lib>adp each2.p
1:A
2:B
3:C
4:NIL

env (環境変数の取得)


形式
 env( $name, $value)
引数
  • $name: 環境変数名(入力/結果)
  • $value: 環境変数の値(結果)
完了時の動作
  • 指定された環境変数がある場合:次の述語を実行に移ります。
  • 指定された環境変数が無い場合:バックトラックします。
バックトラック時の動作
  • 環境変数の次の要素がある場合:次の述語を実行に移ります。
  • 環境変数の次の要素が無い場合:バックトラックします。
説明
 $nameで指定された環境変数の値を取得します。
$nameが変数の場合は、$nameに環境変数名が入り、$valueにその値が入ります。バックトラックすることにより順番に環境変数を取り出せます。

※env述語を使ってループを構成する場合、next述語と組み合わせて使用します。

コード例1(lib/env1.p)
,env('windir').prtn;
実行例1(Windows環境)
D:\sample\lib>adp env1.p
C:\Windows

コード例2(lib/env2.p)
,env($name,$value),prtn($name,'=',$value),next;
実行例2(Windows環境)
ALLUSERSPROFILE=C:\ProgramData
  ・
  ・
 (中略)
  ・
  ・
WindowsSdkDir=C:\Program Files\Microsoft SDKs\Windows\v7.0\
windir=C:\Windows

eload (CGI実行環境の復元)

形式
 eload( $path)
引数
  • $path: 保存した実行環境ファイルのパス(esaveで指定)
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明
 esave述語で保存した実行環境を復元します。$pathにはesave述語で指定したファイルのパスを指定します。

esave・eload述語はCGIのデバッグ時に指定します。esaveでCGIの実行環境(環境変数・CGI変数・COOKIE)が$pathで指定されたファイルへ保存されます。
eloadで保存したCGIの実行環境を復元します。
※通常はADP自身のデバッグに用います。

※Ver0.77で追加になりました。

erase_global (グローバル変数の削除)


形式
 erase_global($key)
引数
  • $key: 変数の名前(キー)
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。

説明
$keyで指定された名前のグローバル変数を削除します。

erase_sessaion (セッション変数の削除)


形式
 erase_sessaion($key)
引数
  • $key: 変数の名前(キー)
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。

説明
$keyで指定された名前のセッション変数を削除します。

esave (CGI実行環境の保存)

形式
 esave( $path)
引数
  • $path: 実行環境の保存先のファイルのパス
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明
 CGIの実行環境を保存します。eload述語で、保存した実行環境を復元できます。

esave・eload述語はCGIのデバッグ時に指定します。esaveでCGIの実行環境(環境変数・CGI変数・COOKIE)が$pathで指定されたファイルへ保存されます。
eloadで保存したCGIの実行環境を復元します。
※通常はADP自身のデバッグに用います。

※Ver0.77で追加になりました。

err (標準エラーへの出力)

形式
 err ( $src, ...)
引数
  • $src: 出力する項(複数可)
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明
$srcで指定された項を標準エラーへ出力します。

コード例 (lib/err.p)
,err("This is error messages.");

実行例
D:\sample\lib>adp err.p
This is error messages.

errn (標準エラーへの出力)

形式
 err ( $src, ...)
引数
  • $src: 出力する項(複数可)
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明
$srcで指定された項を標準エラーへ出力します。最後に改行を出力します。

コード例 (lib/err.p)
,err("This is error messages.");

実行例
D:\sample\lib>adp err.p
This is error messages.

euc2sjis

eval (文字列のコンパイル実行)


形式
 eval( $code, $stderr, $stdout)
引数
  • $code: ADPコード(入力)
  • $stderr: 標準エラー(結果、省略可)
  • $stdout: 標準出力(結果、省略可)
完了時の動作
  • 指定された環境変数がある場合:次の述語を実行に移ります。
  • 指定された環境変数が無い場合:バックトラックします。
バックトラック時の動作
  • $codeで指定されたコードへバックトラックします。
説明
 $codeで指定されたADPのコードをコンパイル&実行します。標準エラー($stderr)および標準出力($stdout)を変数に受け取ることが出来ます。$stderr,$stdoutは省略することも出来ます。
結果の受け取りを1つだけ指定した場合、$stdoutとみなされます。

evalは非常に強力な為、セキュリティリスクに注意して使用してください。実行できる組み込み述語に制限を加えた、sandbox述語も用意されています。

※Ver0.79で追加になりました。

exit (プログラムの終了)


形式
 exit( $retcode)
引数
  • $retcode: 結果コード
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明
$retcodeを引数として、Cのライブラリ関数 exit を呼び出し、プログラムを終了させます。

fail (常に失敗する バックトラックの起動)

形式
 fail
引数
    なし
完了時の動作
  • 常にバックトラックします。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。 ※本来はこの状況にはならないはず。
説明
常にバックトラックを発生させます。
これによりループを実装できますが、通常はnext述語を使用します。

fappend

fappendn

fread

freadn

futf8

MAC OS LIONでカレントロケールがutf8以外では動作しない。

fwrite

fwriten

global (グローバル変数の値取得)


形式
 global( $key, $item)
引数
  • $key: 変数の名前(キー)
  • $item: 変数の値(結果)
完了時の動作
  • $keyで指定された変数がある場合:次の述語を実行に移ります。
  • $keyで指定された変数が無い場合:バックトラックします。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。

説明
$keyで指定された名前のグローバル変数の値を取得します。

コード例(lib/global.p)
,$a = 10 ,_global($a,'hoge');
,$a = 30 ,global('hoge').prt;

実行例
D:\sample\lib>adp global.p
10

graph

hash

html

insert (テーブルレコードの追加)

形式
 insert($constr, $insertmap, $tablename)
引数
  • $constr:ODBC接続文字列
  • $insertmap:追加カラム・値マップ
  • $tablename:テーブル名
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明
 ODBC接続文字列については、DBライブラリを参照下さい。
 指定された値($insertmap)で、指定されたテーブル($tablename)にレコードを追加します。
$insertmapは、以下のように、連想配列でキー部分にカラム名、値部分にそのカラムの値を指定します。
{ 'colname1' => value1, 'colname2' => value2 ... }
以下のようなSQLに変換されます。

 INSERT INTO tablename(colname1, colname2,...) = VALUES(value1,value2,...)

他のDBライブラリの述語やクエリー変数を返す述語等、連想配列を返す述語の結果を用いて、本述語を呼び出すことが考えられます。
その場合、ある連想配列から特定のキーを持った連想配列を新しく作成したい場合があります。この場合、lsmap述語を使用します。
そのほか、キーの値を変更しながら新しい連想配列を作成したい場合は、remap述語を使用します。
searchの戻り値等、通常の配列から連想配列を作成する場合は、mkmap述語を使用します。

DBライブラリのサンプル

instr (部分文字列の検索)

形式
 instr( $src, $findstr, $start, $pos)
引数
  • $src: 文字列
  • $findstr: 検索文字列
  • $start: 開始位置(バイト)(省略可)
  • $pos: 結果(バイト)
完了時の動作
  • 文字列が見つかった場合:次の述語を実行に移ります。
  • 文字列が見つからなかった場合:バックトラックします。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明

$srcで指定された文字列から$findstrで指定された文字列を検索します。
検索は文字列の先頭から終端に向かって行われます。逆向きの検索を行う場合はinstrrevを使用します。
結果の位置は、$pos(バイト単位)に格納されます。検索開始位置を$start(バイト単位)で指定することもできます。
みつからなかったらバックトラックします。


コード例 (lib/instr.p)
+t('This is a pen. I have the pen. I give you the pen.');
,t.instr('pen').prtn,next;
,prtn;
,t.instr('pen',10).prtn,next;
,prtn;
,t.instr('pen',11).prtn,next;
,prtn;

実行例
D:\sample\lib>adp instr.p
10
26
46

10
26
46

26
46

instrrev (部分文字列の逆向き検索)

形式
 instrrev( $src, $findstr, $start, $pos)
引数
  • $src: 文字列
  • $findstr: 検索文字列
  • $start: 開始位置(バイト)(省略可)
  • $pos: 結果(バイト)
完了時の動作
  • 文字列が見つかった場合:次の述語を実行に移ります。
  • 文字列が見つからなかった場合:バックトラックします。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明

$srcで指定された文字列から$findstrで指定された文字列を検索します。
instrと異なり、検索は文字列の終端から先頭に向かって行われます。
結果の位置は、$pos(バイト単位)に格納されます。検索開始位置を$start(バイト単位)で指定することもできます(指定された位置より前で検索します)。
みつからなかったらバックトラックします。


コード例 (lib/instrrev.p)
+t('This is a pen. I have the pen. I give you the pen.');
,t.instrrev('pen').prtn,next;
,prtn;
,t.instrrev('pen',30).prtn,next;
,prtn;
,t.instrrev('pen',10).prtn,next;

実行例
D:\sample\lib>adp instrrev.p
46
26
10

26
10

10

int (整数への変換)

形式
 int( $src, $dst)
引数
  • $src: 変換元
  • $dst: 結果
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明
$srcで指定された値を整数へ変換し$dstへ格納します。$srcは文字列と共に実数、整数自身も指定できます。
$srcがNILの場合、$dstにNILを格納します。

コード例 (lib/int.p)
,int('100').prtn;
,int(30.3).prtn;

実行例
D:\sample\lib>adp int.p
100
30

item (連想配列・リストのキーから値の取得)


形式
 item( $hash, $key, $item)
引数
  • $hash: 連想配列・リスト(
  • $key: 変数の名前(キー)
  • $item: 変数の値(結果)
完了時の動作
  • $keyで指定されたキーがある場合:次の述語を実行に移ります。
  • $keyで指定されたキーが無い場合:バックトラックします。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。

説明
$keyで指定されたキーを連想配列、リストから検索します。
連想配列は、以下で指定される配列です。
{ "key1" => "value1", "key2" => "value2" }

item述語にリストを指定する場合、キーと値を|で区切った、以下の形式になります。
[ ["key1" | "value1"], ["key2" | "value2"] ]

配列の配列へのアクセスおよび糖衣構文のリストのキーアクセスもご参照ください。

補足 Ver0.70では、キーが無い場合、nilを$itemにセットしバックトラックしません。

keys

last (?述語の評価結果を返す)

述語のポストフィックスの『評価結果をlast述語で返す』を参照ください。

left (左からの部分文字列の取得)

形式
 left( $src, $cnt, $dst)
引数
  • $src: 文字列
  • $cnt: バイト数
  • $dst: 結果
完了時の動作
  • 正常時:次の述語を実行に移ります。
  • 異常時:バックトラックします。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明
$srcで指定された文字列を先頭から$cntバイト取得し、$dstに格納します。
引数に無効な値を指定するとバックトラックします。

コード例 (lib/mid.p)
,$x = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
 ,left($x,4).prtn
 ,mid($x,3,4).prtn
 ,right($x,4).prtn
 ;

実行例
D:\sample\lib>adp mid.p
ABCD
DEFG
WXYZ

log

logn

make_session_id

mkdir (ディレクトリの作成)


形式
 rmdir( $path)
引数
  • $path: パス
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。

説明
$pathで指定されたディレクトリを作成します。
内部的にはmkdirシステムコール(Windowsの場合は、_mkdir Cライブラリ関数)を呼び出します。

mkmap (配列とキーから連想配列を作成する)

形式
 mkmap( $values, $keys, $dst)
引数
  • $values: 値の配列
  • $keys: キー配列
  • $dst: 連想配列
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明

単純な値の配列からキーを与えて連想配列を作成します。
値の配列、キーの配列の先頭要素からそれぞれ連想配列が作成されます。
つまり、
{ $keys[0] => $values[0], $keys[1] => $values[1], .... }
と同様の変換を行います(但し連想配列の作成ではキー部分を変数にすることは出来ませんので上記コードはコンパイルできません)。

キーの配列の要素数の方が少ない場合は、キーの配列の要素数だけ連想配列が作成されます。
値の配列の要素数より、キーの配列の要素数が多い場合エラーとなります(実行例を参照のこと)。

コード例 (lib/mkmap.p)
,$a = { 'a', 'b', 'c', 'd' }, $r == $a.mkmap({ 'A', 'B', 'C', 'D' }), prtn($r);
,$a = { 'a', 'b', 'c', 'd' }, $r == $a.mkmap({ 'B', 'C', 'D' }), prtn($r);
,$a = { 'a', 'b', 'c' }, $r == $a.mkmap({ 'A', 'B', 'C', 'D' }), prtn($r);
 

実行例
D:\sample\lib>adp mkmap.p
{A => a, B => b, C => c, D => d}
{B => a, C => b, D => c}
RuntimeError:argment type error (1)  At mkmap($a,{"A","B","C","D"},$r)

next (繰り返し処理)

ホーン節・ユニフィケーション・バックトラックの『ホーン節とその評価(4)next述語』を参照ください。

now (時刻文字列の取得)

形式
 now( $add, $result)
引数
  • $add: 現在時刻からの加算(減算)秒(省略可)
  • $result: 結果(時刻の文字列)
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明
時刻の文字列を取得します。$addを省略すると現在時刻の文字列を$resultに返します。
$addに整数値を指定すると$add秒だけ現在時刻から進めます(マイナス値だと戻します)。
now述語は、Cランタイムのctimeを呼び出しています。

コード例 (lib/now.p)
,now.prtn;
,now(86400).prtn;

実行例
Thu Apr 28 20:44:29 2011
Fri Apr 29 20:44:29 2011

pathsep (パスセパレーターの取得)

形式
 pathsep( $sep)
引数
  • $sep: 結果(パスセパレータ)
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明
パスセパレーターを$sepへ返します。Windows環境では'\'が、Unix環境では'/'が返ります。

コード例 (lib/pathsep.p)
,pathsep.prt;

実行例(Windows)
D:\sample\lib>adp pathsep.p
\

pipe

platform (OSタイプの取得)

形式
 platform( $type)
引数
  • $type: 結果(OSタイプ)
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明
OSタイプを$typeへ返します。'Windows'または'Unix'が返ります。
本述語を結果を指定して使用することによりプラットホーム別に処理を変えることができます。本述語自体はバックトラックしませんが、結果を明示的に指定するとユニフィケーションが行われ値が異なるとバックトラックします。
以下の例を参照のこと。

コード例 (lib/platform.p)
,platform('Windows'),spawnp('cmd', '/C dir').prt;
,platform('Unix'),spawnp('ls').prt;
※WindowsはdirコマンドをUnixではlsコマンドを実行します。

実行例(Windows)
D:\sample\lib>adp platform.p
2011/04/28  20:34    <DIR>          .
2011/04/28  20:34    <DIR>          ..
    ・
    ・
   中略
    ・
               2 個のディレクトリ  486,467,096,576 バイトの空き領域
0

pow

print (標準出力への出力)

形式
 print( $src, ...)
引数
  • $src: 出力する項(複数可)
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明
$srcで指定された項を標準出力へ出力します。

コード例 (lib/print.p)
,print("Hello, world.");

実行例
D:\sample\lib>adp print.p
Hello, world.

printn (標準出力への出力)

形式
 print( $src, ...)
引数
  • $src: 出力する項(複数可)
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明
$srcで指定された項を標準出力へ出力します。最後に改行を出力します。

コード例 (lib/print.p)
,print("Hello, world.");

実行例
D:\sample\lib>adp print.p
Hello, world.

prt (標準出力への出力)

形式
 prt( $src, ...)
引数
  • $src: 出力する項(複数可)
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明
$srcで指定された項を標準出力へ出力します。
print述語の省略形です。

コード例 (lib/print.p)
,print("Hello, world.");

実行例
D:\sample\lib>adp print.p
Hello, world.

prtn (標準出力への出力)

形式
 print( $src, ...)
引数
  • $src: 出力する項(複数可)
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明
$srcで指定された項を標準出力へ出力します。最後に改行を出力します。
printn述語の省略形です。

コード例 (lib/print.p)
,print("Hello, world.");

実行例
D:\sample\lib>adp print.p
Hello, world.

query (クエリー変数の取得)


形式
  1. query@(@result)
  2. query($key, $result)
  3. query@($hashname, @result)
  4. query($key, $defvalue, $result)
  5. query@($hashname, $defvalue, @result)
引数
  • $key: 変数の名前(キー)
  • $result: 変数の値(結果)
完了時の動作
  • $key / $hashnameで指定された変数がある場合:次の述語を実行に移ります。
  • $key / $hashnameで指定された変数が無い場合:バックトラックします。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。

説明

rand (乱数値の取得)

形式
 rand( $value)
引数
  • $value: 乱数値
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明
乱数を取得します。乱数の種の初期化はsrandで行います。
rand/srandはメルセンヌツイスターを使用しています。

コード例 (lib/rand.p)
,srand(1000);
,counter(1,1,5,$),rand.prtn,next;

実行例
D:\sample\lib>adp rand.p
-1487821389
882709079
493951047
-1673392448
-213533445

rcsvf

rcsvfh

remap (キーの変更)

形式
 remap( $values, $keys, $dst)
引数
  • $values: 連想配列
  • $keys: キー変換配列
  • $dst: 結果連想配列
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明

連想配列から、キーの値を変換して新しい、連想配列を作成します。
つまり、

{ 'A' => 1, 'B' => 2, 'C' => 3 }

という連想配列があり、キーをそれぞれ 小文字にしたい場合、

{ 'A' => 'a', 'B' => 'c', 'C' => 'c' }

というキー変換配列を与えて、remapを実行させますと、

{ 'a' => 1, 'b' => 2, 'c' => 3}

という結果を得ることができます。
remapはDBライブラリと組み合わせて使用します。あるSQLの結果を用いて、select/insert等のDB述語を実行する場合にカラム名が異なる為に直接実行できない場合に、remapを使用します。

コード例 (lib/remap.p)
,$a == { 'A' => 1, 'B' => 2, 'C' => 3, 'D' => 4}
 ,$k == { 'A' => 'a', 'B' => 'b', 'C' => 'c', 'D' => 'd' }
 ,prtn($a)
 ,$r == remap($a, $k)
 ,prtn($r);

実行例
D:\sample\lib>adp remap.p
{A => 1, B => 2, C => 3, D => 4}
{a => 1, b => 2, c => 3, d => 4}

キーの配列の要素数の方が少ない場合はエラーとなりません。キーの配列の要素数だけ連想配列が作成されます。
値の配列の要素数より、キーの配列の要素数が多い場合エラーとなります。

remove (ファイルまたはディレクトリの削除)


形式
 remove( $path)
引数
  • $path: パス
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。

説明
$pathで指定されたファイルまたはディレクトリを削除します。
内部的にはremoveシステムコール(Windowsの場合は、_remove Cライブラリ関数)を呼び出します。

regex_replace (正規表現による全置換)

形式
 regex_replace( $src, $find_regex, $replace, $offset, $dst)
引数
  • $src: 文字列
  • $find_regex: 正規表現による検索文字列
  • $replace: 置換文字列
  • $offset: 検索開始位置(省略可)
  • $dst: 結果
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明
$srcで指定された文字列から$find_regexで指定された文字列を検索し、$replaceで置き換え、結果を$dstで返します。
$offsetが指定された場合、$offsetで示された場所から検索(置換)を行います。
本述語は一致した全ての文字列を置換します。

※ADPは Boost.Regex 正規表現ライブラリを使用しています。
正規表現の構文は、Perl Reqular Expression Syntax のとおりです。

regex_replace_first (正規表現による置換)

形式
 regex_replace_first( $src, $find_regex, $replace, $offset, $dst)
引数
  • $src: 文字列
  • $find_regex: 正規表現による検索文字列
  • $replace: 置換文字列
  • $offset: 検索開始位置(省略可)
  • $dst: 結果
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明
$srcで指定された文字列から$find_regexで指定された文字列を検索し、$replaceで置き換え、結果を$dstで返します。
$offsetが指定された場合、$offsetで示された場所から検索(置換)を行います。
本述語は最初に一致した文字列のみ置換します。

※ADPは Boost.Regex 正規表現ライブラリを使用しています。
正規表現の構文は、Perl Reqular Expression Syntax のとおりです。

replace (文字列の全置換)

形式
 replace( $src, $find, $replace, $offset, $dst)
引数
  • $src: 文字列
  • $find: 検索文字列
  • $replace: 置換文字列
  • $offset: 検索開始位置(省略可)
  • $dst: 結果
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明
$srcで指定された文字列から$findで指定された文字列を検索し、$replaceで置き換え、結果を$dstで返します。
$offsetが指定された場合、$offsetで示された場所から検索(置換)を行います。
本述語は一致した全ての文字列を置換します。


replace_first (文字列の置換)

形式
 replace_first( $src, $find, $replace, $offset, $dst)
引数
  • $src: 文字列
  • $find: 検索文字列
  • $replace: 置換文字列
  • $offset: 検索開始位置(省略可)
  • $dst: 結果
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明
$srcで指定された文字列から$findで指定された文字列を検索し、$replaceで置き換え、結果を$dstで返します。
$offsetが指定された場合、$offsetで示された場所から検索(置換)を行います。
本述語は最初に一致した文字列を置換します。


response_header (レスポンスヘッダの設定)

形式
 response_header($header)
引数
  • $header:設定するヘッダ
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明
AWPモード時に使用します。$headerで指定した値をHTTPのレスポンスヘッダに設定します。
response_header述語を呼び出すと、以前に呼び出したresponse_header、add_response_headerの内容は上書きされます。

AWPモード時には自動で以下のレスポンスヘッダが付与されます。

Content-Type: text/html

Content-Typeを変更される場合は本述語を呼び出し、Context-Typeを再設定します。

レスポンスヘッダに追加を行う場合は、add_response_headerを呼び出します。

right (右からの部分文字列の取得)

形式
 right( $src, $cnt, $dst)
引数
  • $src: 文字列
  • $cnt: バイト数
  • $dst: 結果
完了時の動作
  • 正常時:次の述語を実行に移ります。
  • 異常時:バックトラックします。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明
$srcで指定された文字列を最終バイトから$cntバイト取得し、$dstに格納します。
引数に無効な値を指定するとバックトラックします。

コード例 (lib/mid.p)
,$x = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
 ,left($x,4).prtn
 ,mid($x,3,4).prtn
 ,right($x,4).prtn
 ;

実行例
D:\sample\lib>adp mid.p
ABCD
DEFG
WXYZ

rkey

rmdir (ディレクトリの削除)


形式
 rmdir( $path)
引数
  • $path: パス
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。

説明
$pathで指定されたディレクトリを削除します。
内部的にはrmdirシステムコール(Windowsの場合は、_rmdir Cライブラリ関数)を呼び出します。

rollback (DBのロールバックを行う)

形式
 rollback($constr)
引数
  • $constr:ODBC接続文字列
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明
 ODBC接続文字列については、DBライブラリを参照下さい。
 指定された接続文字列のDB接続のロールバックを行います。
現在のバージョンでは、DBへの接続は、接続文字列毎に管理されます。
接続文字列が同じ場合は同一の接続になり、異なる場合は違う接続となります。
デフォルトでは、DBに対する操作はオートコミットOFFになっています。
DBに対する変更を行った場合、commitを呼び出さないと結果が反映されません。
rollbackを呼び出すと結果をロールバックします。

rsort (配列の降順ソート)

形式
 rsort( $src, $key, $dst)
引数
  • $src: ソート対象(配列)
  • $key: ソートキー(配列、省略可)
  • $dst: ソート結果対象(配列)
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明
$srcで指定された配列をソートし、結果を$dstに返します。ソートは降順(大きいものから小さいものへ)で行われます。
$srcが連想配列の配列の場合、$keyによりソートキーを指定することが出来ます。
※昇順でソートを行う場合、sortを使用します。

コード例 (lib/rsort1.p)
,rsort({ "z", "d", "a", "b", "f"},$dst), prtn($dst);

実行例
>adp rsort1.p
{z, f, d, b, a}


コード例 (lib/rsort2.p)
,$src == {{ 'col1' =>  20, 'col2' => 'test5' }, 
	      { 'col1' => 100, 'col2' => 'test2' }, 
	      { 'col1' =>   5, 'col2' => 'test3' }, 
	      { 'col1' =>  20, 'col2' => 'test4' }}
 ,rsort( $src, {'col2', 'col1'}, $dst), prtn($dst);

実行例
>adp rsort2.p
{{col1 => 20, col2 => test5}, {col1 => 20, col2 => test4}, {col1 => 5, col2 =>
 test3}, {col1 => 100, col2 => test2}}

※Ver 0.76から追加になりました。

sandbox (制限モードでの文字列のコンパイル実行)


形式
 sandbox( $code, $stderr, $stdout)
引数
  • $code: ADPコード(入力)
  • $stderr: 標準エラー(結果、省略可)
  • $stdout: 標準出力(結果、省略可)
完了時の動作
  • 指定された環境変数がある場合:次の述語を実行に移ります。
  • 指定された環境変数が無い場合:バックトラックします。
バックトラック時の動作
  • $codeで指定されたコードへバックトラックします。
説明
 $codeで指定されたADPのコードをコンパイル&実行します。標準エラー($stderr)および標準出力($stdout)を変数に受け取ることが出来ます。$stderr,$stdoutは省略することも出来ます。
結果の受け取りを1つだけ指定した場合、$stdoutとみなされます。

sandbox述語はeval述語と同様に文字列をコンパイル&実行しますが、sandobox述語は制限モードで実行され、以下の述語が使用できません。

add_allowtag , remove_allowtag , select , selecta , sql , sqla , insert , update , save , delete , commit , rollback , tables , columns , _db_quote , _db_default_quote , file , fread , freadn , _file , fwrite , fwriten , log , fappend , logn , mkdir , rcsvf , rcsvfh , apachelog , _temp_path , unlink , rmdir , remove , bsave , bload , esave , eload , html , query , cookie , response_header , add_response_header , _cookie , wol , sendmail , spawnp , env , arg , sleep , exit , transfer , eval , sandbox

※Ver0.79で追加になりました。

save (テーブルレコードのUPSERT)

形式
 save($constr, $savemap, $tablename, $filterlist)
引数
  • $constr:ODBC接続文字列
  • $savemap:保存・絞込みカラム・値マップ
  • $tablename:テーブル名
  • $filterlist:フィルターカラムリスト
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明
 ODBC接続文字列については、DBライブラリを参照下さい。
 指定された値($savemap)で、指定されたテーブル($tablename)にレコードデータを保存します。UPSERTと呼ばれている操作を行うことで、一部のDBサーバーが対応しているMERGE文の代用とします。

$savemapは、以下のように、連想配列でキー部分にカラム名、値部分にそのカラムの値を指定します。
{ 'colname1' => value1, 'colname2' => value2, 'wcol1' => value1, 'wcol2' => value2 ... }
$filterlistは、$savemapのうちwhere句に入れるキー・値ペアのキーを指定します。
{ 'wcol1', 'wcol2', ... }

saveは最初に以下のようなSQLを発行し、フィルターで指定されたレコードが存在するか確認します。

 SELECT count(*) FROM tablename WHERE wcol1 = value1 AND wcol2 = value2 ...

該当するレコードが存在する場合はupdate述語が実行され、存在しない場合はinsert述語が実行されます。

※現在のバージョン(Ver0.7)はトランザクション(テーブルロック等)を、考慮していません。上記のレコードの確認から、insertまでに他のプログラムからinsertされる可能性があります。
安全に運用するには別途テーブルロックをかけるかアプリケーションレベルで同時実行が行われない等、排他制御の必要があります。

他のDBライブラリの述語やクエリー変数を返す述語等、連想配列を返す述語の結果を用いて、本述語を呼び出すことが考えられます。
その場合、ある連想配列から特定のキーを持った連想配列を新しく作成したい場合があります。この場合、lsmap述語を使用します。
そのほか、キーの値を変更しながら新しい連想配列を作成したい場合は、remap述語を使用します。
searchの戻り値等、通常の配列から連想配列を作成する場合は、mkmap述語を使用します。

DBライブラリのサンプル

search

select (テーブルレコードの取得)

形式
 select($constr, $wherefilter, $tablename, $selectlist, @result)
引数
  • $constr: ODBC接続文字列
  • $wherefilter: 条件カラム・値マップ
  • $tablename: テーブル名
  • $selectlist:セレクトカラムリスト(省略可)
  • @result: レコードの内容
完了時の動作
  • レコードが存在する時:次の述語を実行に移ります。
  • レコードが存在しない時:バックトラックします。
バックトラック時の動作
  • 次のレコードが存在する時:次の述語を実行に移ります。
  • 次のレコードが存在しない時:バックトラックします。
  • ※レコードの数(-1)だけバックトラックします。
説明
 ODBC接続文字列については、DBライブラリを参照下さい。
 指定された条件($wherefilter)で、指定されたテーブル($tablename)のレコードを取得します。
$wherefilterは、以下のように、連想配列でキー部分にカラム名、値部分にそのカラムの値を指定します。
キー値のペアは複数指定できます。複数指定するとANDで結ばれます。
{ 'colname1' => value1, 'colname2' => value2 ... }
以下のようなSQLに変換されます。

 SELECT * FROM tablename WHERE colname1 = value1 AND colname2 = value2 ... 

SELECT リストを指定する場合は、$selectlistを指定します。
{ 'scol1', 'scol2', ... }
上記のように指定しますと、以下のようにSQLが作成されます。

 SELECT scol1, scol2 FROM tablename WHERE colname1 = value1 AND colname2 = value2 ... 

上記以外の条件式(数値で代償比較演算子を使用したい。OR条件を付与したい等)を指定したい場合は、SQL述語を使用します。

レコードの内容は、$resultにSELECTリスト名をキーとして連想配列として格納されます。

他のDBライブラリの述語やクエリー変数を返す述語等、連想配列を返す述語の結果を用いて、本述語を呼び出すことが考えられます。
その場合、ある連想配列から特定のキーを持った連想配列を新しく作成したい場合があります。この場合、lsmap述語を使用します。
そのほか、キーの値を変更しながら新しい連想配列を作成したい場合は、remap述語を使用します。
searchの戻り値等、通常の配列から連想配列を作成する場合は、mkmap述語を使用します。

DBライブラリのサンプル

selecta (テーブルレコードの全件取得)

形式
 select($constr, $wherefilter, $tablename, $selectlist, @result)
引数
  • $constr: ODBC接続文字列
  • $wherefilter: 条件カラム・値マップ
  • $tablename: テーブル名
  • $selectlist:セレクトカラムリスト(省略可)
  • @result: 全レコードの内容
完了時の動作
  • レコードが存在する時:次の述語を実行に移ります。
  • レコードが存在しない時:バックトラックします。
バックトラック時の動作
  • 常にバックトラックします。
説明
 ODBC接続文字列については、DBライブラリを参照下さい。
 指定された条件($wherefilter)で、指定されたテーブル($tablename)のレコードを取得します。
$wherefilterは、以下のように、連想配列でキー部分にカラム名、値部分にそのカラムの値を指定します。
キー値のペアは複数指定できます。複数指定するとANDで結ばれます。
{ 'colname1' => value1, 'colname2' => value2 ... }
以下のようなSQLに変換されます。

 SELECT * FROM tablename WHERE colname1 = value1 AND colname2 = value2 ... 

SELECT リストを指定する場合は、$selectlistを指定します。
{ 'scol1', 'scol2', ... }
上記のように指定しますと、以下のようにSQLが作成されます。

 SELECT scol1, scol2 FROM tablename WHERE colname1 = value1 AND colname2 = value2 ... 

上記以外の条件式(数値で代償比較演算子を使用したい。OR条件を付与したい等)を指定したい場合は、SQL述語を使用します。

レコードの内容は、SELECTリスト名をキーとして連想配列として格納されたものになり、全てレコードが配列として$resultに格納されます。

select述語は、1レコードずつ処理するときに使用します。selectaは全レコードを取得する必要があるときに使用します。selectaで結果を取得するとselect述語で全ての結果を変数に配列として構成するよりもよりメモリを効率よく使用できます。


他のDBライブラリの述語やクエリー変数を返す述語等、連想配列を返す述語の結果を用いて、本述語を呼び出すことが考えられます。
その場合、ある連想配列から特定のキーを持った連想配列を新しく作成したい場合があります。この場合、lsmap述語を使用します。
そのほか、キーの値を変更しながら新しい連想配列を作成したい場合は、remap述語を使用します。
searchの戻り値等、通常の配列から連想配列を作成する場合は、mkmap述語を使用します。

※Ver0.79で追加になりました。

DBライブラリのサンプル

sendmail

session (セッション変数の値の取得)


形式
 session( $key, $item)
引数
  • $key: 変数の名前(キー)
  • $item: 変数の値(結果)
完了時の動作
  • $keyで指定された変数がある場合:次の述語を実行に移ります。
  • $keyで指定された変数が無い場合:バックトラックします。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。

説明
$keyで指定された名前のセッション変数の値を取得します。。
セッション変数は、セッションIDをキーにして保存される変数です。
テンポラリディレクトリにセッションIDをキーとしたファイルが作成され、そのファイルにセッション変数の実体が格納されます。
AWPモード時には、HTTPヘッダにセッションIDがSet-Cookieにて返されます。
コマンドモード時には、adpコマンドの引数に-s オプションを付けることによりセッションIDが確認できます。そのIDを環境変数ADP_SESSION_ID_STRINGで指定するとセッションを引き継ぐことができます。

コード例(lib/session.p)
,$a = 10 ,_session($a,'hoge');
,$a = 30 ,session('hoge').prtn;

実行例
D:\sample\lib>adp -s session.p
10
ADP_SESSION_ID_STRING=66A1F1F96DA12E9E5DC9819B472EDB4B71ABBB44

sha1 (SHA1ハッシュを返す)

形式
 sha1( $src, $dst)
引数
  • $src: 文字列
  • $dst: 結果
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明
$srcで指定された文字列からSHA1ハッシュ値を$dstに取得します。$dstは文字列で返されます。

コード例 (lib/sha1.p)
,file('sha1.p').sha1.prt;

実行例
D:\sample\lib>adp sha1.p
D62745C8425675EE054CFA89D982DC746CF4E062

size (配列 / リストの要素数を返す。文字列のバイト数を返す)

形式
 size( $src, $dst)
引数
  • $src: 配列・リスト/文字列
  • $dst: 結果(要素数/バイト数)
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明
配列・リストの要素の数を返します。文字列が指定された場合は文字列の長さ(バイト数)を返します。
※リストの場合は単純に右側の要素をたどり、そのカウント数を返します。のでツリー形式のようなリストの場合、size述語の戻り値と全要素数とは数が合いません。
※バグ 0.69まではリストの要素数が-1されてカウントされます。
※0.77から$srcに文字列が指定出来るようになりました。

コード例 (lib/size.p)
,$l = [a], $l.size.prtn;
,$a = { 1, 2, 3}, $a.size.prtn;

実行例
D:\sample\lib>adp size.p
1
3

slmap (連想配列の選択)

形式
 slmap( $values, $keys, $dst)
引数
  • $values: 連想配列
  • $keys: 選択キー配列
  • $dst: 結果連想配列
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明

連想配列から、指定されたキーの値を取り出し、新しい連想配列を作成します。
つまり、

{ 'A' => 1, 'B' => 2, 'C' => 3 }

という連想配列があり、キーが'A','B'が欲しいとき、

{ 'A', 'B'}

という選択キー配列を与えて、slmapを実行させますと、

{'A' => 1, 'B' => 2}

という結果を得ることができます。
remapはDBライブラリと組み合わせて使用します。あるSQLの結果を用いて、select/insert等のDB述語を実行する場合にWHEREフィルターに必要なカラムを取り出す場合に、slmapを使用します。

コード例 (lib/remap.p)
,$x = { 'A' => 1, 'B' => 2, 'C' => 3, 'D' => 4 }, slmap($x, { 'B', 'D'}).prt;

実行例
D:\sample\lib>adp slmap.p
{B => 2, D => 4}

sleep (一定時間の待機)

形式
 sleep( $duration)
引数
  • $duration: 待機時間(msec)
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明
$durationで指定された時間だけ待機します。
WindowsではSleep APIを呼び出します。Unixではnanosleepを呼び出します。

コード例 (lib/sleep.p)
,sleep(1000);

実行例
D:\sample\lib>adp sleep.p

sort (配列の昇順ソート)

形式
 sort( $src, $key, $dst)
引数
  • $src: ソート対象(配列)
  • $key: ソートキー(配列、省略可)
  • $dst: ソート結果対象(配列)
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明
$srcで指定された配列をソートし、結果を$dstに返します。ソートは昇順(小さいものから大きいものへ)行われます。
$srcが連想配列の配列の場合、$keyによりソートキーを指定することが出来ます。
※降順でソートを行う場合、rsortを使用します。

コード例 (lib/sort1.p)
,sort({ "z", "d", "a", "b", "f"},$dst), prtn($dst);

実行例
>adp sort1.p
{a, b, d, f, z}


コード例 (lib/sort2.p)
,$src == {{ 'col1' =>  20, 'col2' => 'test5' }, 
	      { 'col1' => 100, 'col2' => 'test2' }, 
	      { 'col1' =>   5, 'col2' => 'test3' }, 
	      { 'col1' =>  20, 'col2' => 'test4' }}
 ,sort( $src, {'col2', 'col1'}, $dst), prtn($dst);

実行例
>adp sort2.p
{{col1 => 100, col2 => test2}, {col1 => 5, col2 => test3}, {col1 => 20, col2 =>
test4}, {col1 => 20, col2 => test5}}

※Ver 0.76から追加になりました。

spawnp (プロセスの実行)

形式
 spawnp( $cmd, $arg,..., $result)
引数
  • $cmd: コマンド
  • $src: コマンドの引数(複数可)
  • $result: 結果
完了時の動作
  • コマンドの起動に成功:次の述語を実行に移ります。
  • コマンドの起動に失敗:バックトラックします。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明
$cmdはコマンド名で、コマンドの引数を$argで指定します。コマンドの実行結果は、$resultに返されます。
本述語は、WindowsのCライブラリ _spawnvp関数を呼び出します(述語名はこの関数名からきています)。
Unixでは、fork/execvpシステムコールを用いて_spawnvp関数の動作をエミュレートしています。

コード例 (lib/spawn.p)
,spawnp('notepad.exe').prt;

実行例(Windows)
D:\sample\lib>adp spawn.p
0
※メモ帳が起動します。

split (文字列の分割)

形式
 split( $src, $key, @result)
引数
  • $src: 変換元
  • $key: 分割キー
  • @result: 結果
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明
$srcで指定された値を整数へ変換し$dstへ格納します。$srcは文字列と共に実数、整数自身も指定できます。

コード例 (lib/split.p)
,$x = "This is a pen", split($x, ' ').each.prtn,next;

実行例
D:\sample\lib>adp split.p
This
is
a
pen

sprintf (sprintf関数の呼び出し)

形式
 sprintf( $arg, ... , $fmt, $result)
引数
  • $arg: フォーマット文字列への引数(可変)
  • $fmt: フォーマット文字列
  • $result: 結果
完了時の動作
  • 正常時:次の述語を実行に移ります。
  • 異常時(フォーマットエラー):バックトラックします。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明
$fmtをフォーマット文字列とし、$argを引数としてC言語のsprintf関数を呼び出します。結果を$resultに格納します。

以下の書式指定文字をサポートしています(xとoはVer0.7からのサポートです)。
  • d: 整数(10進数で出力)
  • x: 整数(16進数で出力)
  • o: 整数( 8進数で出力)
  • f: 実数
  • s: 文字
  • ,: 3桁区切り整数(独自の拡張)

書式指定文字は、%sのように指定します。またC言語の書式指定文字列と同様に%40sや%5.2fなどのようにサイズも指定できます。
※Ver 0.82からはサイズ指定に * が使用できます。%*.*sのように指定できます。

コード例 (lib/sprintf.p)
,sprintf("文字列", 10, 3.14159265, 2560000, "%s::%03d / %5.2f / %,").prt;

※%s::%03dで、s::とコロンが2回出てきますが、Ver0.82以降のADPのsprintfの独自仕様で2つ必要になります。

実行例
D:\sample\lib>adp sprintf.p
文字列:010 /  3.14 / 2,560,000

※引数の順番がVer 0.82から変わりました。0.81以前では、以下のとおり$fmtが最初になります。
 sprintf( $fmt, $arg, ... , $result)


フォーマット文字列内での連想配列のキーアクセス
ADP 0.82以降では、sprintfに連想配列を渡した場合、フォーマット文字列に連想配列でのキーアクセスができるようになります。
書式指定文字の後に、例えば %s:key1; のように、
:キー名;
とコロンで続けてキー名を指定します(セミコロン;でキー名を終了させます)。

コード例 (lib/sprintf2.p)
_global({ :key1=>10, :key2=>'test', :key3=>10.5}, 'test');
global('test').sprintf("%d:key1; %s:key2; %f:key3;").prtn;

実行例
D:\sample\lib>adp sprintf2.p
10 test 10.500000


sql (SQLの実行)

形式
 sql($constr, $sql, $paramlist, @result)
引数
  • $constr: ODBC接続文字列
  • $sql: SQL文
  • $paramlist: パラメーターリスト
  • @result: レコードの内容(省略可)
完了時の動作
  • レコードが存在する時:次の述語を実行に移ります。
  • レコードが存在しない時:バックトラックします。
バックトラック時の動作
  • 次のレコードが存在する時:次の述語を実行に移ります。
  • 次のレコードが存在しない時:バックトラックします。
  • ※レコードの数(-1)だけバックトラックします。
説明
 ODBC接続文字列については、DBライブラリを参照下さい。
 $sqlで指定されたSQL文を実行します。ODBCのパラメータ(SQL文中の?)を$paramlistで配列またはリストで指定します。

レコードの内容は、$resultにSELECTリスト名をキーとして連想配列として格納されます。

※insert / update / delete 等結果を取得しないSQLの実行の場合は、$resultを省略できます。

他のDBライブラリの述語やクエリー変数を返す述語等、連想配列を返す述語の結果を用いて、本述語を呼び出すことが考えられます。
その場合、ある連想配列から特定のキーを持った連想配列を新しく作成したい場合があります。この場合、lsmap述語を使用します。
そのほか、キーの値を変更しながら新しい連想配列を作成したい場合は、remap述語を使用します。
searchの戻り値等、通常の配列から連想配列を作成する場合は、mkmap述語を使用します。

DBライブラリのサンプル

sqla (SQLの実行および結果の全件取得)

形式
 sql($constr, $sql, $paramlist, @result)
引数
  • $constr: ODBC接続文字列
  • $sql: SQL文
  • $paramlist: パラメーターリスト
  • @result: 全レコードの内容
完了時の動作
  • レコードが存在する時:次の述語を実行に移ります。
  • レコードが存在しない時:バックトラックします。
バックトラック時の動作
  • 常にバックトラックします。
説明
 ODBC接続文字列については、DBライブラリを参照下さい。
 $sqlで指定されたSQL文を実行します。ODBCのパラメータ(SQL文中の?)を$paramlistで配列またはリストで指定します。

レコードの内容は、SELECTリスト名をキーとして連想配列として格納されたものの配列として、$resultに全レコードの内容が入ります。
sql述語は、1レコードずつ処理するまたは結果が不要なときに使用します。sqlaは全レコードを取得する必要があるときに使用します。sqlaで結果を取得するとsqlで全ての結果を変数に配列として構成するよりもよりメモリを効率よく使用できます。


他のDBライブラリの述語やクエリー変数を返す述語等、連想配列を返す述語の結果を用いて、本述語を呼び出すことが考えられます。
その場合、ある連想配列から特定のキーを持った連想配列を新しく作成したい場合があります。この場合、lsmap述語を使用します。
そのほか、キーの値を変更しながら新しい連想配列を作成したい場合は、remap述語を使用します。
searchの戻り値等、通常の配列から連想配列を作成する場合は、mkmap述語を使用します。

※Ver0.79で追加になりました。

DBライブラリのサンプル

srand (乱数シードの初期化)

形式
 srand( $seedv)
引数
  • $seedv: 乱数の種(省略可)
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明
rand述語で返される乱数シードの初期化を行います。rand/srandはメルセンヌツイスターを使用しています。srand述語は、$seedvを引数としてメルセンヌツイスターのinit_genrandを呼び出します。$seedvを省略すると現在時刻とプログラムの実行時間から、init_by_arrayを呼び出しシードの初期化を行います。

コード例 (lib/rand.p)
,srand(1000);
,counter(1,1,5,$),rand.prtn,next;

実行例
D:\sample\lib>adp rand.p
-1487821389
882709079
493951047
-1673392448
-213533445

str (文字列への変換)

形式
 str( $src, $dst)
引数
  • $src: 変換元
  • $dst: 結果
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明
$srcで指定された値を文字列へ変換し$dstへ格納します。$srcには整数、実数と共に文字列自身も指定できます。
$srcがNILの場合、$dstにNILを格納します(*Ver0.81以降)。

コード例 (lib/str.p)
,str(10).prtn;
,str(10.2).prtn;

実行例
D:\sample\lib>adp str.p
10
10.200000

substr (部分文字列の取得)

形式
 substr( $src, $start, $cnt, $dst)
引数
  • $src: 文字列
  • $start: 取得開始位置(バイト)
  • $cnt: 取得バイト数(省略可)
  • $dst: 結果
完了時の動作
  • 正常時:次の述語を実行に移ります。
  • 異常時:バックトラックします。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明
$srcで指定された文字列を$startバイトの位置から$cntバイト取得し、$dstに格納します。
$cntを省略すると最後まで取得します。
引数に無効な値を指定するとバックトラックします。

※ver0.82から追加になります。
※substrは、midのエリアスになります。

コード例 (lib/mid.p)
,$x = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
 ,left($x,4).prtn
 ,mid($x,3,4).prtn
 ,right($x,4).prtn
 ;

実行例
D:\sample\lib>adp mid.p
ABCD
DEFG
WXYZ

tables (テーブル定義の取得)

形式
 tables($constr, @result)
引数
  • $constr: ODBC接続文字列
  • @result: 定義情報
完了時の動作
  • テーブルが存在する時:次の述語を実行に移ります。
  • テーブルが存在しない時:バックトラックします。
バックトラック時の動作
  • 次のテーブルが存在する時:次の述語を実行に移ります。
  • 次のテーブルが存在しない時:バックトラックします。
  • ※定義されているテーブルの数(-1)だけバックトラックします。
説明
 ODBC接続文字列については、DBライブラリを参照下さい。
ODBC APIのSQLTablesを呼び出してDBに含まれるテーブル情報を取得します。

※返される値についてはODBCドライバにより代わる場合があります。
※SQLiteでは動作しません。


times (実行回数の取得)

形式
 times( $result)
引数
  • $result: 結果
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明
 本述語が呼び出された回数を返します。1からカウントします。

コード例 (lib/times.p)
,counter(1,1,3,$),counter(1,1,2,$),times.prtn,next;

実行例
D:\sample\lib>adp times.p
1
2
3
4
5
6

transfer (別のスクリプトに制御を渡す)


形式
 transfer( $filepath)
引数
  • $filepath: ファイル名
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。

説明
$filepathで指定されたスクリプトに制御を移します。BASICのCHAINステートメント、ASPのtransferメソッドとほぼ同じです。
transfer述語を実行したスクリプトの以降の別のゴール節は実行されません。以下のコードで printn は実行されません(printnは別のゴール節)。
,transfer($filepath);
,printn('transfer was called');

transfer述語を実行したスクリプトの同じゴール節の残りの述語は実行されます。以下のコードで printnは実行されます(,で区切られている為、printnは同じゴール節)。

,transfer($filepath),printn('transfer was called');


コード例(lib/transferl.p)
,printn('transfer1');
,transfer('transfer2.p');
,printn('I am not printed.');

コード例(lib/transfer2.p)
,printn('transfer2');
,transfer('transfer3.p'), printn('I am printed.');

コード例(lib/transfer3.p)
,printn('DONE.');

実行例
D:\sample\lib>adp transfer1.p
transfer1
transfer2
I am printed.
DONE.

trim (文字列の空白の削除)

形式
 trim( $src, $dst)
引数
  • $src: 文字列
  • $dst: 結果
完了時の動作
  • 正常時:次の述語を実行に移ります。
  • 異常時:バックトラックします。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明
$srcで示された文字列の両端の空白(スペース、タブ、改行)を削除し$dstに格納します。
引数に無効な値(文字ではない)を指定するとバックトラックします。

コード例 (lib/trim.p)
,$x = "   ABC   ", trim($x).prtn;

実行例
D:\sample\lib>adp trim.p
ABC

unlink (ファイルの削除)


形式
 unlink( $filepath)
引数
  • $filepath: ファイルパス
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。

説明
unlinkシステムコール(Windowsの場合は、_unlink Cライブラリ関数)を呼び出す。

update (テーブルレコードの更新)

形式
 update($constr, $updatemap, $tablename, $filterlist)
引数
  • $constr:ODBC接続文字列
  • $updatemap:変更・絞込みカラム・値マップ
  • $tablename:テーブル名
  • $filterlist:フィルターカラムリスト(省略可)
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明
 ODBC接続文字列については、DBライブラリを参照下さい。
 指定された値($updatemap)で、指定されたテーブル($tablename)にレコードデータを変更します。
$updatemapは、以下のように、連想配列でキー部分にカラム名、値部分にそのカラムの値を指定します。
{ 'colname1' => value1, 'colname2' => value2, 'wcol1' => value1, 'wcol2' => value2 ... }
$filterlistは、$updatemapのうちwhere句に入れるキー・値ペアのキーを指定します。
{ 'wcol1', 'wcol2', ... }

以下のようなSQLに変換されます。

 UPDATE tablename SET colname1 = value1, colname2 = value2,... 
   WHERE wcol1 = value1 AND wcol2 = value2 ...

上記以外の条件式(数値で代償比較演算子を使用したい。OR条件を付与したい等)を指定したい場合は、SQL述語を使用します。

$filterlistは省略できます。省略した場合は、{ 'ID' } が指定されたとみなされます。また$filterlistを {} と指定しますと、省略と異なり、$updatemapの全ての要素がフィルター(WHERE句に置く)とみなされます。{} はupdateでは通常使用しません。

他のDBライブラリの述語やクエリー変数を返す述語等、連想配列を返す述語の結果を用いて、本述語を呼び出すことが考えられます。
その場合、ある連想配列から特定のキーを持った連想配列を新しく作成したい場合があります。この場合、lsmap述語を使用します。
そのほか、キーの値を変更しながら新しい連想配列を作成したい場合は、remap述語を使用します。
searchの戻り値等、通常の配列から連想配列を作成する場合は、mkmap述語を使用します。

DBライブラリのサンプル

urldecode (URLデコード)

形式
 urldecode( $src1,..., $dst)
引数
  • $src1: 文字列(複数可)
  • $dst: 結果
完了時の動作
  • 正常時:次の述語を実行に移ります。
  • 異常時:バックトラックします。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明
$src1で指定された文字列をURLデコードします。複数の文字列を指定した場合、単純に結果を結合します。
引数に文字列以外を指定するとバックトラックします。

※+(プラス)文字は 空白 に変換されます。

コード例(lib/urldecode.p)
,urldecode('%93%FA%96%7B%8C%EA%95%B6%8E%9A%97%F1%81iShift-JIS%81j').prtn;

実行例(Windows)
D:\sample\lib>adp urldecode.p
日本語文字列(Shift-JIS)

urlencode (URLエンコード)

形式
 urldecode( $src1,..., $dst)
引数
  • $src1: 文字列(複数可)
  • $dst: 結果
完了時の動作
  • 正常時:次の述語を実行に移ります。
  • 異常時:バックトラックします。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明
$src1で指定された文字列をURLエンコードします。複数の文字列を指定した場合、単純に結果を結合します。
引数に文字列以外を指定するとバックトラックします。

URLエンコードは、以下で指定された以外の文字を%(文字コード)に変換します。
・アルファベット
・- (マイナス)
・_ (アンダースコア)
・. (ピリオド)

コード例(lib/urlencode.p シフトJISで保存)
,urlencode('日本語文字列(Shift-JIS)').prtn;

実行例(Windows)
D:\sample\lib>adp urlencode.p
%93%FA%96%7B%8C%EA%95%B6%8E%9A%97%F1%81iShift-JIS%81j

wol (WOLパケットの送出)

形式
 wol( $mac_addr, $ip_addr, $port)
引数
  • $mac_addr: MACアドレス
  • $ip_addr: IPアドレス(省略可)
  • $port: ポート番号(省略可)
完了時の動作
  • 常に次の述語を実行に移ります。バックトラックしません。
バックトラック時の動作
  • 常にバックトラックします。前の述語にバックトラックします。
説明

WOLパケットを送出します。WOLパケットを受け取ったマシンは起動します(BIOSの設定が必要)。

$mac_addrは起動するマシンのMACアドレスを指定します。
MACアドレスの確認は、確認したいマシン上で、
Windowsでは、" ipconfig /all " コマンド実行結果の物理アドレス、
Linuxでは、 ”ifconfig " コマンド実行結果のHWaddr
で確認できます。

その他、" arp -a "コマンドを実行すると現在通信中のマシンのMACアドレスが確認できます。
事前にpingコマンドで通信し、その後 " arp -a "コマンドを実行します。

$ip_addrは通常、指定の必要がないですが、マルチホームサーバー等、ネットワークカードを複数挿してるマシンの場合、通信できない場合があります。その場合、$ip_addrにネットワークに対するブロードキャストアドレスを指定します。
例えば、ネットワークアドレス(IPアドレスのサブネットマスクで指定される部分)が
192.168.0.
の場合、
192.168.0.255
を指定します。

$portは通常ほとんど指定する必要がありません。


Powered by ADP.