注意: 9.1 組み込み関数の規則 利用オプション
ディスク・ファイルの現在の内容を1つ以上の作業リストに変換します。
この組み込み関数は、Visual LANSAアプリケーションとスプレッドシートなどのその他の製品との間で情報を簡単に転送できるようにするためのものです。
注:この組み込み関数は、テキスト・データ・ファイルのみを操作するよう設計されています。
引数
|
戻り値
|
技術上の注記 - TRANSFORM_FILE
ファイル名
詳細については、「TRANSFORM_LIST」の「9.219.1 出力ファイル形式 」を参照してください。
入力ファイルの形式
詳細については、「TRANSFORM_LIST」の「9.219.1 出力ファイル形式 」を参照してください。
特殊なオプションCLとDLは、テストとデバッグの目的にのみ使用することができます。このオプションを本番のソフトウェアでは使用しないでください。使用した場合、このオプションによって指定のリストは読み取られません。代わりに、レイアウトの詳細が準備され、入力ファイルの予期されるレアウトが、ファイル・パラメータで指定されたファイルに実際に書き込まれます。指定のファイルが存在しない場合、ファイルが作成されます。指定のファイルが存在する場合、そのファイル内の既存のデータがすべて消去されてから、レイアウトの詳細が書き込まれます。レイアウト・ファイルは生成されると、標準のテキスト・エディターで表示することができます。この情報によって、実際の入力データ・ファイルのレコード・レイアウトとこの組み込み関数が予期するレイアウトを比較することができます。このような比較によって、フォーマットに関する問題を見つけることができます。
Alpha、Char、String、BLOB、CLOBフィールドでの無効文字の処理
TRANSFORM_LISTの「9.219.1 出力ファイル形式 」に記載されている「Alpha、Char、String、BLOB、CLOB フィールドでの無効文字の処理」を参照してください。同じルールが適用されますが、適用されるのは、出力ファイルのフィールドに対してではなく、作業リストのフィールドです。
一部の特殊文字は、この組み込み関数で正しく処理できません。このような特殊文字として、復帰(Windowsでのバイナリー値:0x0D)、ライン・フィード(Windowsでのバイナリー値:0x0A)、CTRL+Z (Windowsでのバイナリー値0x1A)があります。例えば、TRANSFORM_FILEは、Windows環境で'0x1A'文字を検出すると、読み取りを停止します。
TRANSFORM_LISTによってバイナリー・データをファイルに出力するには、組み込み関数「9.9 BINTOHEX 9.9 BINTOHEX 」を使用して英数字文字列に変換してから、結果をTRANSFORM_LISTで出力する方法が最善です。
データを取得するには、TRANSFORM_FILEを使用してデータを読み取ってから、「9.115 HEXTOBIN 9.115 HEXTOBIN 」を使用してデータを元の形式に変換して戻します。
小数点文字
通常、このオプションは、コンマ (,) を小数点区切り文字として使用するようシステムを構成しているヨーロッパの一部の国で要求されます。デフォルトでは、組み込み関数はコンマを予期します。コンマを生成しない他の製品によってデータ出力が使用される場合、これが適切でない場合があります。このオプションを使用して、この組み込み関数がピリオド文字 (.) を予期するように指定することができます。
また、固定レコード形式と「暗黙指定 (位置による)」される小数点を使用するアプリケーションによって読み取りファイルが作成される場合、特殊なオプションR (削除) を使用することができます。この場合、小数点位置の番号は、作業リストで受け取るフィールドの定義によって暗黙指定されます。詳細については、TRANSFORM_LISTを参照してください。
Rオプションは、ファイル形式がCとDの場合のみ使用することができます。
入力ファイルのクローズ・オプション
このオプションを使用すると、この組み込み関数が実行を完了したときにファイルの終わりに到達していない場合は、入力ファイルを閉じないように指定することができます。
通常、この組み込み関数は、呼び出されると、リストをクリアします。その後、リストに収まる量のデータをロードし、入力ファイルを閉じ、呼び出し元のファンクションに制御を戻します。戻りコードは、EFまたはOVに設定され、入力ファイル全体がリストに収まったかどうかが示されます。
ただし、閉じないオプションを使用することによって、次のようにより複雑な処理を実行することができます。
レコードが10,000個以上ある入力ファイルを読み取る、または大量の割り当てメモリーを必要とする大きな作業リストが作成されないようにする
def_list #list fields(....) listcount(#count)
type(*working) entrys(100)
dowhile (#retcode *ne EF)
use TRANSFORM_FILE into #list (with "do
not close" option)
execute processlist
endwhile
execute processlist
上記の例では、使用されるリストが100エントリーが効率的に収まるサイズであっても、入力ファイルからレコードを何個でも読み取ります。リストは、アプリケーションの入力バッファーの役割を果たします。
このオプションとこの組み込み関数を使用するためのヒントを説明します。
レコード選択機能
入力ファイルのタイプがBの場合、使用できません。
引数8、9、10を指定することによって、簡単なレコード選択ロジックを実行することができます。引数8にN以外の有効な値を渡すことによって、このオプションが有効になった場合、ファイルから各<record>が読み取られ、次の式が評価されます。
if (substring(<record>,<position>,<length>) <operation> <value>)
表記の説明:
式が真の場合、レコードは選択されます。式が偽の場合、レコードは無視されます。
この比較は、データ処理の前に行われます。
これは、フィールド指向の演算ではなく、バイト指向の演算です。
レコード選択オプションと共にファイルを使用する場合、固定長列ファイル(TRANSFORM_LISTのCまたはD)を使用することをお勧めします。また、<position>が可変長フィールドの前に現れるように、すべての可変長フィールドをレコードの後方に移動することをお勧めします。この目的は、入力バッファー内の<position>で始まる <length> バイトの部分が、すべてのレコードに対して同じ意味を持つようにすることです。また、<position> + <length>がレコード内のバイト数より大きい場合、TRANSFORM_FILEは、致命的なエラー「比較に無効な引数」を戻し、停止します。
入力ファイルのタイプがA、O、またはTの場合、比較されるデータの前に現れる暗黙指定の文字は、<position>計算で計算される必要があります。
例:
Aタイプのファイルが、2つのAlphaフィールドを持つリストから生成されるとします。フィールドは両方とも9バイトの長さです。エントリーのフィールドは、常にフル(最大長まで埋まっている)です。データに無効な文字はありません。比較は、2番目のフィールドの最初のバイトから行われます。したがって、<position>は、次のように計算される必要があります。
<position> = 1(最初のフィールドの左二重引用符) + 9 (最初のフィールドの長さ) + 1 (右二重引用符) + 1 (カンマ) + 1 (2番目のフィールドの左二重引用符) + 1 (<position>は1から開始) = 14
出力ファイルのタイプがC またはDの場合、<position>は次のように計算されます。
<position> = 9 (最初のフィールドの長さ) + 1 (<position>は1から開始) = 10
レコードがある理由、もしくはない理由を確認したい場合、レベル9、'BIF'カテゴリーへのトレースを有効にしてください。トレース・ファイルは利用されている比較パラメータと比較パラメータと一致しないデータをリストにします。トレースはUnicode形式ではないため、Notepadのような Unicode対応のプログラムを使用している場合、判読可能なデータが表示されないことに注意してください。
付属リスト
この組み込み関数を呼び出すとき、最大10個の付属作業リストを指定することができます。付属リストは、入力ファイルが100を超えるフィールドを含んでいる場合、またはリストの合計エントリー長が256バイトを超える場合に使用することができます。
付属リストの詳細については、組み込み関数「9.219 TRANSFORM_LIST 9.219 TRANSFORM_LIST 」を参照してください。「付属オプション」フィールドの概念は、この組み込み関数には関係ありません。付属リストに定義されるフィールドはすべて、1次リスト(引数1)を論理的に拡張したものとして処理されます。付属作業リストの最大エントリー数は、1次リストに許可された数と同じにする必要があります。
エラー処理とエラー動作
次の表に、ER戻りコードが戻され、RDMLレベルでトラップすることができるエラー (ユーザー・トラップ) とアプリケーションの致命的な障害を引き起こすエラー (システム・エラー) を示します。システム・エラーが発生すると、Visual LANSAの完全なエラー処理が呼び出され、X_RUN「セッション」全体が終了します。通常、システム・エラーをRDMLレベルでトラップすることはできません。
|
エラー処理の注記
複雑なエラー処理スキームをご使用のアプリケーションに組み込むことは避けるよう、強くお勧めします。アプリケーションのすべてのレベルで、以下のようなごく単純なトラップを使用するようにしてください。
if (#retcode *ne OK)
abort msgtxt('Failed to .............................')
endif
標準的なエラー処理を行う組み込み関数を生成されるアプリケーションに組み入れて、問題に対処するようにしてください。ユーザー定義のエラー処理ロジックが非常に複雑になったために全RDMLコードの40から50%を占有するようなケースもあります(アプリケーションには何のメリットもありません)。このような事態に陥らないようにしてください。
特別注記
結果リストのBLOB、CLOBフィールド値
BLOB(またはCLOB)フィールドは、ファイル名だけを保持します。ファイル名の値が<ドライブ>:\ <パス>\<ファイル>.<接尾辞>の場合、BLOB (またはCLOB)ファイル自体は、サブディレクトリ<ドライブ>:\ <パス>\<ファイル>_LOB\にあります。
例えば、以下のようになります。
変換されたファイルからBLOB値BLOBNumber1.txtを取得するには、次を使用します。
C:\Root\Data\Transformed1.dat
この場合、BLOBファイルは以下の場所に存在しなければなりません。
C:\Root\Data\Transformed1_LOB\BLOBNumber1.txt
変換されたファイルがTRANSFORM_LISTによって作成されていない場合、BLOB(またはCLOB)ファイルを複製する必要はありません。この場合、BLOB(またはCLOB)の値には、フル・パスを入れる必要があります。
例えば、BLOBNumber1.txtというBLOBファイルがC:\Data\にあり、このBLOBファイルを複製しない場合、変換されたファイルのBLOBフィールドの値は、C:\Data\BLOBNumber1.txtでなければなりません。
例
「9.219 TRANSFORM_LIST 9.219 TRANSFORM_LIST 」を参照してください。