通常、ASCII のテキスト・ファイルは、テキストを処理するプログラム (編集およ び印刷ルーチンなど) で使用されます。ASCII のテキスト・ファイルの特性は次の とおりです。
v レコードは ASCII 文字で構成されます。
v それぞれのレコードと次のレコードとの区切りには、復帰文字 (X’0D’) および改 行文字 (X’0A’) が使用されます。
v iSeries、eServer i5、または System i5 レコードの最後の末尾ブランクが切り捨て られるため、ASCII ファイルのワークステーション・レコードは可変長になる場 合があります。
ASCII テキスト・ファイルへのデータの転送: ASCII のテキスト・ファイルの作成 時には、iSeries、eServer i5、または System i5 から得られたデータは次のように変 更されます。
v 16 進フィールドは、ハーフバイトごとに ASCII の同等な文字に変更されます。
たとえば、X'D3' は ASCII の 4433 に拡張されて、ファイルに書き出されます。
エディターで表示したり印刷したりする場合には、このストリングは D3 として 表示されます。
v EBCDIC の文字フィールドは変換テーブルの定義に従って、 1 バイトごとに
ASCII 文字に変更され、マッピングされます。
v 日付、時刻、およびタイム・スタンプのデータは、変換テーブルで定義されてい るとおり、ASCII 文字にマッピングされます。
v 可変長フィールドおよびヌル・フィールドは固定長に変換され、後書きブランク
(文字、16 進数、日付、時刻、およびタイム・スタンプの場合) またはゼロ (2 進
数、ゾーン、およびパックの場合) がフィールドの最大長になるまで追加されま す。
注: 一部の EBCDIC 表示不能文字はワークステーションの ASCII の制御文字に
変換されます。 EBCDIC 文字フィールドに表示不能データが入っていると、
予期しない結果になることがあり、ASCII テキスト・ファイルは改変された ように見える場合があります。
たとえば、EBCDIC フィールドの中の X'05' は ASCII の X'09' に変換され ますが、これは水平タブ用の ASCII 制御文字です。ワークステーションのほ とんどのテキスト・エディターでは、ワークステーションのテキスト・ファ イルのデータが右にシフトして表示されるように、このタブ文字が処理され ます。
この問題を解決する 1 つの方法として、これらのフィールドを AS/400 シス テムで文字フィールドでなく 16 進フィールドとして定義する方法がありま す。
v 2 進フィールドは、ASCII の数値に変更されます。たとえば、小数部の桁がない X'FFD3' は、ASCII の 20202020202020202D3435 に拡張されます。エディターで 表示したり印刷したりする場合には、このストリングは -45 として表示されま す。
注: ASCII フィールドの長さは 2 進フィールドの長さによって異なります。
iSeries、eServer i5、または System i5 の 2 進数フィールドの長さは、2 または 4 バイトです。変換された ASCII フィールドの長さは、符号を含めて 6〜11 バ イトです。小数点にはさらに 1 バイトが追加されます。
表31 に、2 進フィールドの長さとその ASCII の長さのマッピングを示します。
表31. バイナリーから ASCII フィールド長マッピング
2 進数の長さ ASCII の長さ 値の範囲
2 6 -32768 〜 32767
4 11 -2147483648 〜 2147483647
v ゾーン 10 進フィールドは ASCII の数値に変更されます。たとえば、フィールド 長が小数点の右側 2 桁を示す EBCDIC の F0F0F9F5F2D6 は、ASCII の
20202D39352E3236 に拡張されます。エディターで表示したり印刷したりする場
合には、このストリングは -95.26 として表示されます。変換されたワークステー
第 9 章 PC400 のデータ転送 177
ション・フィールドの長さは、システムのフィールドの長さに符号のための 1 バ イトを加え、小数点が指定されている場合には、さらに 1 バイトを加えた値に等 しくなります。
v パック 10 進フィールドは ASCII の数値に変更されます。たとえば、X'871D'
(小数点なし) は、ASCII の 2D383731 に変更されます。エディターで表示したり
印刷したりする場合には、このストリングは -871 として表示されます。
10 進数の 2 桁が 1 バイトにパックされているため、変換されたワークステーシ ョンのフィールドの長さは iSeries、eServer i5、または System i5 のフィールド の長さを 2 倍して、小数点 (指定されている場合) の 1 バイトを加えた値になり ます。この長さには常に符号が含まれています。負符号 (-) は負を示し、スペー スは正を示します。
ASCII テキスト・ファイルからのデータの転送: ASCII テキスト・ファイルからシ ステム・ファイルにデータを転送する場合は、そのデータは次のように変更されま す。
v ASCII 文字データは、バイト単位で (iSeries、eServer i5、または System i5 のフ ィールド・タイプに基づいて) EBCDIC 文字、日付、時刻、タイム・スタンプの いずれかのデータに変換されるか、あるいは ASCII 2 バイトを EBCDIC 16 進 数バイトの 1 バイトに変更することによって EBCDIC 16 進数データに変換され ます。
v ASCII の数値データは、指定されたデータ・タイプに応じて、iSeries、eServer i5、または System i5 の 2 進数、ゾーン 10 進数、またはパック 10 進数のデー タに変更されます。
ASCII の数値フィールドには明示的な方法で負符号と小数点が保管されているた
め、iSeries、eServer i5、または System i5 とワークステーションではフィールド の長さが異なります。変換されたフィールドの長さがそのフィールドの使用と一 致するように、それぞれのフィールドは個々に変更されます。データ転送機能 は、ワークステーションのデータをシステムのフィールドに入れようとします。
v iSeries、eServer i5、または System i5 のヌル値可能フィールドの場合、ヌル値
(日付、時刻、およびタイム・スタンプを除く) を確実に検出することはできず、
ヌル値はアップロードされません。 iSeries、eServer i5、または System i5 の可 変長フィールドの場合、末尾ブランクは除去され、フィールドは可変長形式に変 換されます。
ASCII テキスト・ファイルからデータを転送する場合のエラー: ワークステーショ
ンの ASCII テキスト・ファイルから iSeries、eServer i5、または System i5 ファイ ルにデータを転送する場合、次のエラーが起こることがあります。
v ASCII のテキスト・ファイルのデータ・フィールドが長すぎて、iSeries、eServer
i5、または System i5 で定義したファイルのフィールドに入りません。この場合
には、データが切り捨てられます。これは、記述ファイルでシステム・ファイル に指定されたフィールドの長さ以上の文字データを定義した場合に起こります。
EBCDIC フィールドへのデータの転送時にこのエラーが起こるのは、超過バイト
がスペース以外の場合だけです。
16 進フィールドへのデータの転送時にこのエラーが起こるのは、超過バイトがゼ ロ以外の場合だけです。データが指定したフィールドに入るように、これらの超 過バイトは切り捨てられます。
v 数値データの値がシステムのフィールドには大きすぎます。最大値が使用されま す。このエラーは次の場合に起こります。
– フィールドの数値データが、そのフィールドに指定されたバイト数に入らな い。
– 数値フィールドの 10 進数の値に、そのフィールドに指定された桁数以上の値 が含まれている。
フィールドの値は、iSeries、eServer i5、または System i5 で指定されたバイト数 および桁数に対して指定できる最大値に設定されます。
v このフィールドのデータの小数点以下の桁数が大きすぎます。数値は四捨五入さ れます。このエラーは、フィールドの小数点以下の桁数の数値が iSeries、eServer
i5、または System i5 で指定された小数点以下の桁数の数値よりも大きい場合に
起こります。データは余分な最初の桁が 5 以上であれば切り上げられ、4 以下で あれば切り捨てられるので、これらの超過バイトは重要です。
v このフィールドのデータが正しくないか、またはデータ・タイプと一致しませ ん。このエラーは次の場合に起こります。
– ファイル記述で数値として定義されているフィールドに、数値以外のデータが あります。転送要求は、ファイルに正しくないデータを転送するのを防ぐため に終了します。
– 指定されたファイル記述の形式と一致しない ASCII の数値データがありま す。フィールドの中の小数点の位置が正しくない場合にもこのエラーが起こり ます。
– X'30' 〜 X'39' 以外の値、マイナス、プラス、または小数点があります。小数
点またはマイナスが重複しています。転送要求は、ファイルに正しくないデー タを転送するのを防ぐために終了します。
v このフィールドのデータがありません。デフォルト値が使用されます。このエラ ーは、データ・フィールドが定義されて、ファイルにデータがない場合に起こり ます。これは、定義されたすべてのデータが見つかる前にレコードの終わりに達 したことを意味します。
データが定義されていても検出されなかった 1 つ、または複数のフィールドにデ フォルト値が入りファイルに転送されます。デフォルト値は、文字フィールドの
場合には EBCDIC のスペース、数値フィールドおよび 16 進フィールドの場合に
はゼロです。
ユーザー独自のデフォルト値を指定するには、そのファイルの DDS でデフォル
ト値 (DFT) キーワードを使用してください。
v このレコードの終わりに余分なデータがあります。余分なデータは転送されませ ん。このレコードの終わりにあり、かつ、システムのデータ定義またはワークス テーションのファイル記述ファイルで定義されていないデータは、そのデータを 定義したり、変更したりする定義がないので、システム・ファイルには転送され ません。
第 9 章 PC400 のデータ転送 179
ASCII テキスト・ファイルからファイル記述ファイルを使用しないで
iSeries、eServer i5、または System i5 ファイルにデータを転送する場合は、そのフ ァイルに指定されたレコード長を超える余分なデータは転送されません。