Opttech Sort メニュー

AG-TECH CORPAG-TECH CORP

ENGLISH

Opttech Sort for Windows

超高速汎用 ソート/マージ ライブラリー
(データベース 分析、再構築)

Opttech Sort for Windows

Opttech Sort for Windowsは、
データベースファイルから抽出した様々な形式のデータを
ソート(並べ換え)、マージ(併合)、条件による抽出、集計などを行う
テキストファイルの扱いに慣れたプロフェッショナルに最適のツールです。
コマンドラインおよび Windows ベースの
スタンドアローンでの使用はもちろんのこと、
Visual Basic、C++、Delphi など各種高級言語からの
サブルーチンとして使用することも可能です。

製品概要

1効率的なデータ分析

データベースシステムにはデータ処理機能が予め用意されてはいますが、それらの機能はデータベースサーバ上で実行されるので、同時に多くのユーザが利用するとデータベースシステムのパフォーマンス低下を引き起こしかねません。そのため個人レベルのデータ分析や集計は、一旦抽出したデータを使用して処理したほうが効率的なことが多いのです。

2データベース ロードツール

Opttech Sort for Windows はデータベースの再構築にも非常に有用です。外部データが予めソート済みであれば、データベースへのロード時間を著しく短縮することが可能になります。また、重複データや不要データの削除、テーブル内容の再構築、特定のデータ内容の一括変更なども、ロード前の外部データレベルでの処理のほうが容易です。

3ログデータなどの分析ツール

例えばインターネットでのアクセスログなど大量のテキストログの分析や集計に Opttech Sort for Windows は最適です。一般的なフィールドに加え、IPアドレスをソートキーとして使うことができるため、不正アクセスの解析やマーケティングデータの分析などに威力を発揮します。

特徴と仕様

パフォーマンス

  • ソートとデータの入出力に非常に効率的なアルゴリズムを利用しているため、データ処理が非常に高速です。ベンチマークを参照してください。
  • ダイナミックなメモリ割り当てを行いますので、利用可能なメモリ容量に関わらず効率的な処理を可能にします。他のアプリケーション動作に影響を与えないよう、ワークエリアのメモリ割り当てを小さくすることも可能です。
  • ソートのワークエリアには空きメモリをフルに利用しますが、メインメモリが不足した場合にはディスク上のワークファイルを自動的に使用します。ワークファイルはドライブ指定ができますから、フレクシブルな対応が可能です。ワークファイルはソート終了時に自動的に消去されます。

ベンチマークテスト

レコード件数 ファイルサイズ 処理時間(ソート) 処理時間(セレクト)
10,000 800KB 0.05 秒 0.02 秒
50,000 4MB 0.39 秒 0.05 秒
100,000 8MB 0.81 秒 0.10 秒
500,000 40MB 4.72 秒 0.42 秒
1,000,000 80MB 10.06 秒 0.82 秒
  • テストデータは、1レコード長 80バイト、キー長10バイトです。
  • ソートはキー順に並べ替えて出力を、セレクトはキーが一致するレコードだけの出力を行います。ソート処理時間には入力ファイルの読込み時間、出力ファイルの書込み時間も含まれています。セレクトは実際には存在しない値を指定したため、出力時間は含まれません。
  • このベンチマークは当社内のマシン(Windows 2000 Professional、Pentium 4 1.9GHz、メモリ 512MB)での実測です。
  • 実際の運用においては、CPU 速度、実行時に利用可能なメモリ容量、ハードディスク速度、他の動作中アプリケーションなどの状況などによって、速度は大きく異なる場合があります。この数値はあくまで参考としてご利用ください。

入力/出力

  • 同時に扱える入力ファイル数にソフト的な制限はありません。ソート可能なファイルサイズ、レコード長、レコード数などは空きディスク容量などハードウェア的要因にのみ影響されます。
  • 入力ファイルはネットワークシステム上で使用できるよう「共有」モードで開くことができます。
  • Opttech Sort for Windows は次のファイルタイプをサポートします。
    ・ 固定長テキストファイル
    ・ 可変長テキストファイル
    ・ ランダムファイル(完全な固定長)
    ・ デリミットファイル(カンマ区切りなど)
    ・ Micro Focus COBOL 可変長順編成ファイル
    ・ dBASEⅢ および Ⅳ 形式データベースファイル
    ・ ユーザ定義ファイル(レコードおよびファイル終端文字を指定可能)
  • キーが同値のレコードの順序は入力ファイルの並び順が維持されます。
  • ソートされたデータを元の入力ファイルに直接上書きすることができます。
  • 出力レコード件数はスクリーン上で表示されるか、あるいはプログラムに返されます。

ソート/マージ

  • ソート/マージ・コントロールの指定は、キーボード入力するか、単純な形式で保存したパラメータファイルを使用することができます。
  • 最大で 100 までのソート/マージ・コントロールフィールドを指定することができます。コントロールフィールドは、フィールドの開始ポジションと長さ、あるいは相対的なフィールド番号で指定します。各コントロールフィールドごとに異なるデータタイプを指定でき、それぞれに昇順あるいは降順を指定することができます。
  • オプションにより、ファイルの先頭のヘッダレコードを処理の対象から除外することが可能です。
  • 以下のデータタイプをサポートします
    ・ キャラクタ(ASCII・EBCDIC)
    ・ バイナリ/整数(符号付き・無し)
    ・ IEEE 形式浮動小数(4バイト/8バイト)
    ・ アスキー形式数値 ・ ゾーン形式数値(符号付き・無し)
    ・ パック形式数値(符号付き・無し)
    ・ IP アドレス
    ・ オルタネート・コレーティング・シーケンス(ユーザ定義ソート順)

レコードセレクト

  • 特定の条件で、出力の対象となるレコードをセレクトすることができます。また、条件に合致するものをセレクトすることも、合致しないものをセレクトするこも可能です。
  • レコードセレクトの条件は最大 100 フィールドまで指定できます。演算子としては、「等しい」、「より大きい」、「含む」などや「AND(論理積)」、「OR(論理和)」による各条件式の結合をサポートします。また、どんなレベルの条件でもネストさせることができます。
  • レコード全体あるいは特定のフィールド比較に重複フィールドのレコード処理が可能です。重複レコードを1レコードのみセレクトすることや、重複して存在するレコードのみをセレクトできます。
  • 処理を開始するレコード番号を開始することや、処理するレコード数を指定することができます。

再フォーマット/集計機能

  • 出力ファイルに書き込むレコードの構造を変えることができます。入力ファイルに存在するフィールドに加え、定数フィールド(16進でのバイナリ出力も可能)、レコード番号、レコード長、CR/LF などを加えることが可能です。
  • 数値フィールドでは、特定のフィールドが一致(重複)するレコードをグループ化して、その合計値を出力することできます。

スタンドアローンでの利用

  • Opttech Sort for Windows には、Windows ユーザインタフェースとコマンドラインインタフェースの2種類のスタンドアローンプログラムが用意されており、お使いになる方の好みにより使い分けることができます。
  • Windows ユーザインタフェースプログラムでは、入力ファイルや出力ファイルの選択をダイアログでブラウズして行えます。指定したコントロールパラメータなどはファイルに保存することができ、自動的な処理開始も選択できます。
  • コマンドラインプログラムは、DOS コマンドプロンプトでの操作に慣れた方向けに設計されています。すべてのパラメータがコマンドラインから引き渡せるため、バッチファイルなどへの組込も容易です。

サブルーチンでの利用

  • サブルーチンソートには、ファイルから入力しファイルに出力する「ファイルソート」と、メモリ上ですべての処理を行う「レコードソート」の2種類が用意されています。
  • 処理レコード件数とエラーコードが返されますので、プログラムでそれに応じた対応処理が可能です。
  • Opttech Sort for Windows は、標準で以下の言語からサブルーチンとして使用することができます。
    ・ C#, VB.NET (.NET Framework対応)
    ・ Microsoft Visual Basic
    ・ Microsoft Visual C++
    ・ Borland Delphi
    ・ Micro Focus COBOL
    ・ 富士通 COBOL 85/97
    ・ 富士通 F-BASIC
    ・ WinBatch
    ・上記以外でも、DLL 呼び出しが可能な言語であれば、原則としてどのような言語でもサブルーチンとしての利用が可能です。

サンプルプログラム
※製品には VB.NET のサンプルが含まれています。

  • Visual Basic ファイルソートのサンプル

    1. 下のサンプルは Visual Basic プログラムです。他の言語からの呼び出し手順も基本は同じです。
    2. Opttech Sort for Windows へパラメータをセットアップします(Infilev$ =、Outfilev$ =、Ctlstmtv$ =を参照)。
    3. CALL ステートメントによって Opttech Sort for Windows を呼び出します(Call Sortvb …を参照)。
    4. レコード出力数とステータスコードが返されます。
    Private Declare Sub Sortvb Lib "OTSW32.DLL" Alias "s_1mains" _
    
    	(ByVal Infile$,ByVal Outfile$,ByVal Ctlstmt$,Numrec&,Retcode&)
    
    Private Sub cmdStartButton_Click()
    
    	Infilev$ = txtInfile.Text
    
    	Outfilev$ = txtOutfile.Text
    
    	Ctlstmtv$ = txtCtlstmt.Text
    
    	Call Sortvb(Infilev$, Outfilev$, Ctlstmtv$, Numrecv&, Retcodev&)
    
    	txtNumrec.Text = Str$(Numrecv&) txtRetcode.Text = Str$(Retcodev&)
    
    End Sub
    
  • C レコードソートのサンプル

    1. ここで示すサンプルはC言語プログラムです。他の言語も呼び出し手順は同じです。
    2. 比較するルーチンやその他の複雑なコーディングを記述する必要はありません。
    3. Opttech Sort for Windowsに渡すデータをメモリに保持することができる場合、ディスクアクセスは必要ありません。
    4. Opttech Sort for Windowsに渡すデータがメモリに保持するには大きすぎる場合、ディスクワークスペースが使われても、処理完了後に自動的に消去されます。
    5. 「レコードソート」プロセスの途中でもスムーズに処理を停止することができるように、「アボート」機能が提供されます。
    6. 「レコードソート」機能はOpttech Sort for Windowsを利用方法に柔軟性を与えるために提供されます。
    /* C program calling Opttech Sort with records */
    
    	char io_area[100], *result;
    
    	unsigned int func, io_len, ret_code;
    
    	FILE *f1, *fopen();
    
    /* set up for initialization call func=1 */
    
    	func = 1;
    
    	strcpy(io_area,"sort(1,10,c,a)");
    
    	io_len = strlen(io_area);
    
    	RSMSCS(func, io_area, &io_len, &ret_code);
    
    	if (ret_code != 0) sorterr(ret_code);
    
    	if ((f1 = fopen("samp.dat","r")) == NULL) {
    
    	printf("can not open file \n"); exit(1); }
    
    /* pass records to sort func=2 */
    
    	func = 2; result = fgets(io_area, 100, f1);
    
    	while(result != NULL) {
    
    		io_len = strlen(io_area);
    
    		RSMSCS(func, io_area, &io_len, &ret_code);
    
    		if (ret_code != 0) sorterr(ret_code);
    
    		result = fgets(io_area, 100, f1);
    
    	}
    
    /* get sorted records back from sort func=3 */
    
    	func = 3;
    
    	while(ret_code != 1) {
    
    		RSMSCS(func, io_area, &io_len, &ret_code);
    
    		if (ret_code == 1) break;
    
    		if (ret_code > 1) sorterr(ret_code);
    
    		io_area[io_len-1] = '\0';
    
    		printf("%s\n",io_area);
    
    	}

Contactお問い合わせ

お気軽にお問い合わせください。

お問い合わせ
必須会社名

個人のお客様は「個人」と入力してください。

必須お名前
必須メールアドレス
必須メールアドレス(確認)
必須ライセンス ありなし
ダウンロード目的