トップ

CSVファイルの入出力とソート結果を配列で返すモジュール


■概 要

CSVファイルの入出力とソート結果を配列で返すPerlモジュールです。
ソート時の指定により、@ソートキーとして複数の項目を指定できる。A項目毎に昇順か降順かを指定できる。 B項目毎に文字列比較か数値比較かを指定できる。といった特徴があります。
また、モジュール化してあるので、データベースへアクセスする感覚で扱えます。

■ダウンロード

何れかの圧縮ファイルをダウンロードし、解凍してください。(同梱されているファイルは同じものです。)

SORT.pm Ver1.03  sort103.lzh   sort103.zip

■ファイル一覧

ファイル名 ファイルの内容 パーミッション
SORT.pm Perlモジュール 644
jcode.pl 日本語コード変換ライブラリ 644
sample.cgi 実行スクリプト(サンプル) 755
sample.csv CSVファイル(サンプル) 666
readme.htm このページと同様のHTMLファイル
※jcode.plは、歌代和正氏によって作成されているPerlライブラリです。
※パーミッションは、あくまでも一般的なサーバの例です。 お使いのISP等の事業者の指示に従って、適切な値を設定してください。

■利用方法

SORT.pm を実行スクリプトと同じ場所または、Perlから検索できる場所へ設置します。 返すメッセージの文字コードを EUC または JIS にしたい場合は、jcode.pl を同様に設置します。
実行スクリプトからの利用方法は以下の通りですが、実行スクリプトのサンプル(sample.cgi)が同梱してありますので、 参照してみてください。
ここをクリックすると、 当サイトに設置しているスクリプト(sample.cgi)を実行することができます。
なお、サンプルのスクリプトを実行する場合は、必要に応じて先頭行のPerl実行パスを書き換えてください。
use SORT;
モジュールを読み込みます。

$sort = new SORT('./sample.csv', title=>1, lock=>0, jcode=>'euc', debug=>1);
if(!$sort) {
 &error('エラー', SORT::error());
}
オブジェクトを生成します。
パラメタは、ファイル名、オプションの順に記述します。オプションは、title, lock, jcode, debug が有効です。
先頭行が項目行の場合は title=>1 とし、データ行の場合は記述しないか title=>0 としてください。
write メソッドを実行する場合は、lock=>1 とする必要があります。 (read メソッドのファイルオープン前にロックをかけ、write メソッドのファイルクローズ後にロックを解除します。)
jcode=>'sjis'/'jis'/'euc' を指定すると、返すメッセージの文字コードを変換します。('sjis'は省略可)
debug=>1 を指定すると、read メソッド実行時に渡されたパラメタを表示します。
ファイルが見つからない場合は戻り値が偽(0)になり、SORT::error() でメッセージを取得することができます。

$sort->fieldname(',,,,備考');
必要に応じて項目名をセットすることができます。
オブジェクト生成時に title=>1 を指定した場合、先頭行を項目名としてセットしますが、 このメソッドの指定が優先されます。
先頭行の項目名を有効にしたい項目(列)は、上記のように空文字としてください。
上記の場合は5列目のみセットまたは置換されます。

%keys = (key1 => {column=>3, order=>1, type=>1}, key2 => {column=>1, order=>0, type=>0});
$result = $sort->read(%keys);
if(!$result) {
 &error('エラー', $sort->error);
}
read メソッドを実行し、ファイルを読み込みます。(Ver1.00 の sort メソッドを変更)
ソート項目は、column=カラム番号(0..), order=0:昇順 1:降順, type=0:文字 1:数値 を 上記要領で記述します。
キー項目数の制限はありません。また、key1,key2...はキー順を決定するための文字列ですが、 他の文字列でもかまいません。(文字列の昇順=キー順となります。)
データが存在する場合は戻り値にデータ件数をセットしますが、空のファイルの場合は戻り値に -1 をセットします。 また、戻り値が偽(0)の場合は $sort->error でメッセージを取得することができます。
ロック処理でエラーが発生した場合は、lockerror.cgi へ内容を記録します。($LOG_MAX = 0;設定時は無効)
・Force Unlocked ... 強制的にロックを解除した。
・Force Unlock Error ... 強制的にロックを解除しようとしたが失敗した。(中断して戻ります。)
・Lock Error ... ロック処理が失敗した。(中断して戻ります。)

@data = $sort->origdata('csv', tilte=>0);
@data = $sort->origdata('tbl', title=>1);
ソート前のデータを取得したい場合は、origdata メソッドを実行します。
パラメタは、フォーマット、オプションの順に記述します。
フォーマットは、'csv','tbl'の何れかを指定してください。
・csv :1行分のデータをカンマで連結×行数の一次元の配列がセットされます。
・tbl :[行][列]の二次元の配列がセットされます。
オプションは tilte のみ有効で、オブジェクト生成時に title=>1 を指定した場合、 title=>1 とすると項目名を含めた配列がセットされます。

@data = $sort->sortdata('csv', title=>0);
@data = $sort->sortdata('tbl', title=>1);
ソート後のデータを取得したい場合は、sortdata メソッドを実行します。
パラメタは、フォーマット、オプションの順に記述します。
フォーマットは、'csv','tbl'の何れかを指定してください。
・csv :1行分のデータをカンマで連結×行数の一次元の配列がセットされます。
・tbl :[行][列]の二次元の配列がセットされます。
オプションは tilte のみ有効で、オブジェクト生成時に title=>1 を指定した場合、 title=>1 とすると項目名を含めた配列がセットされます。

$sort->unlock;
ロック中の場合はロックを解除します。
write メソッドを実行せずに一連の処理を中断するような場合に実行します。

$result = $sort->write(@data);
if(!$result) {
&error('エラー', $sort->error);
}
配列 @data の内容でファイルへ書き込み、ロックを解除します。
書き込み前に元のファイルを「ファイル名.bak」へリネームし、保存します。($BACKUP = 0;設定時は無効)
何らかの原因で write メソッドが失敗した場合は戻り値が偽(0)になり、$sort->error でメッセージを取得することができます。

$sort->close;
モジュール内の変数を破棄します。

■改版履歴

Ver1.00 (2004-03-27) 初版公開
Ver1.01 (2004-04-01) write メソッドを追加しました。
sort メソッドを read メソッドへ変更しました。
オブジェクト生成時に jcode オプションを追加し、返すメッセージの文字コードを変換可能にしました。
close メソッドで項目数をクリアしてなかった点を修正しました。
SORT::error()、$xxx->error でエラー内容を取得できるようにしました。($xxxはオブジェクト変数)
Ver1.02 (2005-06-23) Excelが出力するCSV形式に対応しました。具体的には、
@値にカンマ、ダブルクォートが含まれる場合は、値全体がダブルクォートで囲んである。
A値に含まれるダブルクォートは""となっている。
これらはファイルからの入力時に変換し、データをCSV形式で取得する場合やファイルへの書込み時に 元のCSV形式に戻します。
Ver1.03 (2006-07-09) unlock メソッドを追加しました。
以下の設定をグローバル変数(package宣言の直後)としましたので、使用環境に応じて容易に変更できます。
・ロック処理の試行回数(秒) ・・・ 初期値:10(推奨値:5〜10)
・ロック後?秒経過なら強制ロック解除 ・・・ 初期値:10(推奨値:10〜60)
・ロックエラー時のログ保存件数 ・・・ 初期値:50
・ファイル更新時のバックアップ ・・・ 初期値:1(する)

■配布、免責等

このPerlモジュールは、フリーソフトです。
本モジュールを使用したことによって生じたいかなる損害においても、作者は一切責任を負わないものとします。
配布、転載は自由に行ってかまいませんが、できれば事前にご連絡ください。

■お問い合わせ

SORT.pmについてのご質問、ご意見、ご要望等がございましたらメールにて承ります。
ただし、ご意見やご要望に100%お答えできるかはお約束できません。
悪しからずご了承願います。
メールはこちらから

By Kitaoka

©Kitaoka