dadllmultiline

DLL 使用法

ライブラリ: dadllmultiline

このライブラリには、複数行テキストを処理する機能が含まれています。6.1 から、複数行テキストの処理が完全に異なっており、エクスポート処理に添付したい場合には、インポート処理に対して1つの同期ポイントを設定できます。(この同期ポイントで、複数行フィールドを持つすべての ascii ファイルフィールドは、1 つのレコードとして検知されます)。

基本的に、複数行タイプの ascii フィールドには、テキストを含む作業用ファイルの名前が入力されます。ただし、複数言語でのテキストが 1 つの複数行として渡されることがあるので、複数のファイル名と言語指標を含めなければなりません。この解決策として実装されているのは、複数行の変数を次のように入力することです。

  • '<tmp_file_name> <language_list>' このように入力すると、ファイルが <tmp_file_name> などのファイル名で存在するようになりますが、(ファイル名部分の) 3 番目の文字 が言語コードによって交換されます。このスキームは、作業用ファイル名の 3 番目の文字が creat.tmp.file$() 内での処理では使用されないという事実に依存していて、その結果、生成されるファイル名が一意となることに注意してください。

インタフェースの詳細については、関数ごとの記述を参照してください。

DLL プロトタイプ
 function extern add.text(
const string text.field(),
const string text(),
long do.append,
string lang(1) )
前 : true (text.field には、テキストフィールドの名前が入ります) 
後 : old(text.field) <> 0 および do.append ならば、<text.field> に指定されるテキスト番号の言語 <lang> によるテキストにテキスト <text> が追加されます。
これ以外の場合、テキスト <text> は新しいテキスト番号に割り当てられ、言語 <lang> および text.field には、この新しいテキスト番号が格納されます (text.field 自体は定数ですが、text.field に名前が格納されている変数に変更が反映されます)

function extern copy.multiline(
long source.fp,
long target.fp )
前 : source.fp は読み込みのために開かれているファイルへのファイルポインタ、target.fp は書き出しのために開かれているファイルへのファイルポインタです 
後 : source.fp の指すファイルに含まれているすべての複数行テキストは、target.fp の指すファイルの内部ファイルポインタの直後に追加されます。
状況 : source.fp の内部ファイルポインタは、複数行テキストの次をポイントしています。

function extern process.multiline.to.text.field(
const string text.field(),
const string multiline.fld(),
long do.append )
前 : multiline.field には、複数行フィールドに対応する標準的な格納方式にしたがって値が入っています。
後 : text.field には複数行フィールドにより作成されたテキストと対応する textnum が格納されます。do.append の値が不変ならば、テキストは単に既存のテキストの後に追加されるのみです。

(text.field 自体は定数ですが、text.field に名前が格納されている変数に変更が反映されます) 
状況 : 正常に追加されたテキストに関して、そのテキストを格納していたファイルが削除されます。元の作業用ファイルも削除されます (たとえ、言語 'p' に対応するテキストが失敗した場合でも)。

function extern process.text.field.to.multiline(
const string text.fld(),
long text.num,
ref string multiline.fld(),
long is.audit.update )
前 : text.field には、TRITON テーブルテキストフィールドの名前が格納されます。
そして、このテーブルフィールドには、text.num を経由して渡されたテキスト番号が格納されます 
後 : multiline.fld に正しい値が格納され (全般的な説明を参照)、テキストを収めたファイルが作成されます。

function extern long read.multiline.from.ascii.file(
long fptr,
const string casf() )
前 : 現在処理中の ASCII ファイルに関して、少なくとも 1 つの複数行フィールドが存在します。fptr は、現在処理中のファイルへのポインタです。ファイル内での位置は、処理中の ASCII 行の直後の行頭です。casf は strip する必要があります。複数行フィールドは、すべて空である必要があります 
返値: エラーに遭遇したかどうか。
後 : 現在の行以降のすべての複数行テキストが処理されます。たとえば、以下のとおりです。
- 現行の ASCII ファイルにあるすべての複数行変数には、適切な値が入ります。
- テキストを収めたファイルが、適切なファイル名で作成されます。
状況 : 実行前: fptr の内部ファイルポインタは、現在処理中のデータ行に続く行の先頭をポイントしています。
実行後: fptr の内部ファイルポインタは、
次の DATA 行の先頭をポイントしています。

function extern remove.temporary.multiline.files(
const string multiline.fld() )
前 : process.text.field.to.multiline が呼び出されています 
後 : ファイル multiline.fld が削除されます

function extern long text.append(
long tm.textno.main,
long tm.textno.append )
前 : tm.textno.main および/または tm.textno.append には、有効なテキスト番号として 1 つ以上の
言語によるテキストが格納されています 後 : tm.textno.main は tm.textno.append の
内容により拡張されます 説明 : 2 つのステップがあります。
1. tm.textno.main の内容が最終行まで読み出される
2. この最終行が、tm.textno.append の内容と結合される 
返値: 追加された行の数

function extern write.multiline.to.ascii.file(
long fptr,
const string fdnm(),
const string multiline.fld() )
前 : fdnm は複数行 ASCII フィールド (先頭に casf_ が付かない) で、
multiline.fld には fdnm の内容が入っています。fptr は、
書き出しのために開かれるファイルをポイントします。
後 : * この複数行フィールドに収められているすべての
言語のテキストが、fptr でポイントされているファイルに書き出されます
* テキストを含んでいるすべての tmp ファイルが
削除されます* tmp??????? ファイルが削除されます

function extern long xch.text.defaults(
domain ttadv.txtc text.field fixed,
ref domain tttxt.txtg textgr,
ref domain tttxt.opwd edit.opt )
説明 : 前条件、返値、および後条件は、funtion text.defaults(text.field, textgr, edit.opt) と
同様です。唯一の相違は、この関数では以前に自身が呼び出され
たときの結果が内部に保持されるので、同じテキストフィールド
に関してこの関数が複数回呼び出された場合に、
よりよいパフォーマンスが得られる点です。

関連トピック