FixedLength

FixedLengthストリームは、固定長データを扱うためのストリームです。FixedLengtストリームのみEBCDICエンコーディングを扱うことができます。

ストリームプロパティ

プロパティ名
読込み開始行 データのうちレコードとして処理する先頭行数を指定します。例えば、データの1行目が不要の固定長データの場合、2を指定すると1行目を飛ばして2行目からをストリームとして出力します。初期値は1です。
フィールド数 レコードのフィールド数を指定します。指定すると、フィールド定義で指定した数分のフィールドが用意されます。フィールド名には「field数字」のようにfieldに1からの数字を付加した名前で定義されます。初期値は3です。
出力エンコーディング ストリームのエンコーディングを指定します。
ホスト系のデータを扱うためのエンコーディングを、フローサービス固有のエンコーディング名を使って指定することができます。指定するには、フローサービス固有のエンコーディング名を直接入力します。詳しくは、下記「フローサービス固有のエンコーディング名」を参照してください。
utf-8 unicode utf-8
shift_jis シフトJIS
euc-jp EUC-JP
iso-2022-jp ISO-2022-JP
Windows-31J Windows-31J
ebcdic ebcdic
レコード区切り レコードの区切りを指定します。以下の区切りが指定できます。区切りを選択すると、プロパティの表示が切り替わります。
改行 改行コードプロパティで指定した改行で区切ります。
レコード長 レコード長プロパティで指定した長さで区切ります。
改行コード レコード区切りプロパティが「改行」の場合、レコードの区切りとなる改行コードを指定します。
※外部からストリームを読み込む場合は、必ずしも改行コードが指定した改行コードである必要はありません。
プラットフォーム プラットフォーム標準の改行コードに変換します。
CR+LF CR+LFに変換します。
CR CRに変換します。
LF LFに変換します。
レコード長 レコード区切りプロパティが「レコード長」の場合、レコードの区切りとなる長さを指定します。初期値は256です。
パック10進の符号の有無 パック10進の符号の有無を指定します。
入力時必須、出力時常に出力 符号ニブルは入力時に必須、出力時には常に出力します。
入力時省略可、出力時常に出力 符号ニブルは入力時に省略可能、出力時には常に出力します。
入力時省略可、出力時正の場合出力しない 符号ニブルは入力時に省略可能、出力時には正の場合出力しません。
パック10進の符号書式 パック10進の符号の書式を指定します。
C(正),D(負) 入出力とも正符号は16進数でC、負符号はDです。
A,C,E,F(正),B,D(負) 入力時は正符号はA,C,E,F、負符号はB,Dを許容、出力時は正符号はF、負符号はDです。
ゾーン10進の符号の有無 ゾーン10進の符号の有無を指定します。
入力時必須、出力時常に出力 符号ニブルは入力時に必須、出力時には常に出力します。
入力時省略可、出力時常に出力 符号ニブルは入力時に省略可能、出力時には常に出力します。
入力時省略可、出力時正の場合出力しない 符号ニブルは入力時に省略可能、出力時には正の場合出力しません。
ゾーン10進の符号書式 ゾーン10進の符号の書式を指定します。入出力とも同じ動作をします。 出力エンコーディングプロパティに「ebcdic」以外が指定された場合にのみ有効です。
C(正),D(負) 符号を表す最終桁のゾーン部が正符号は16進数でC、負符号は16進数でDです。例えば、-105は「31 30 D5」となります。
EBCDIC互換 EBCDICで文字列表現したものをそのままASCII文字として変換したものです。例えば、-105の場合、EBCDICでは「F1 F0 D5」となり文字列表現は"10N"になりますので、ASCIIで"10N"を表す「31 30 4E」となります。

フィールド定義

フィールド名、データ型、開始位置、長さ、小数点位置を定義します。

フィールド名 フィールドの名前を指定します。
データ型 String、Boolean、Integer、Double、Decimal、DateTime、Binary、ZonedDecimal、PackedDecimalのいずれか。
「出力エンコーディング」プロパティにフローサービス固有のエンコーディング名を指定した場合、「String(X)」と「String(N)」が追加表示され、この2種類のいずれかを選択します。
String(X) シフトコードを含む文字列であり、長さにはシフトコードの長さも含まれます。
String(N) シフトコードを省略した文字列となり、長さではシフトコードを除いた長さを定義します。
「レコード区切り」プロパティが「改行」の場合、BinaryとPackedDecimalは使用できません。指定した場合、コンパイルエラーとなります。
開始位置 レコードの先頭からのフィールド位置のインデックスを0ベースで指定します。
長さ 長さをバイト数で指定します。ただし、「出力エンコーディング」プロパティに「utf-16」を入力した場合は文字数で指定します。
小数点位置 データ型がZonedDecimalまたはPackedDecimalの場合、小数点位置を指定します。それ以外のデータ型では使用しません。

注意

フィールド名に利用できる文字列として以下の条件があります。

/を除く文字が使用可能
  • 名前の長さには制限なし
  • 英字の大文字と小文字は区別される
  • 半角空白や日本語は使用可能

メモ

  • レコード区切りプロパティが「改行」で、外部からストリームを読み込んだ場合にフィールド定義のフィールド数より読み込んだフィールド数が少ないとき、nullが埋められます。フィールド定義のフィールド数より読み込んだフィールド数が多いとき、そのフィールドは無視します。
  • レコード区切りプロパティが「レコード長」で、外部からストリームを読み込んだ場合にレコード長プロパティの長さより読み込んだ長さが短いとき、空白が埋められます。

フローサービス固有のエンコーディング名

フローサービスではホスト系のデータを扱うための固有のエンコーディング名が定義されています。現在定義されているエンコーディング名とそのキャラクタセットは以下の通りです。

AS-CP00930 IBM CP00930(CP00290 + CP00300)
AS-CP00930-EX AS-CP00930にOSがWindowsの場合の調整を加えたもの
AS-CP00939IBM CP00939(CP01027 + CP00300)
AS-EBCDIC-JEFEBCDIC + 富士通JEFコード
AS-EBCDIK-JEFEBCDIK + 富士通JEFコード
AS-EBCDIC-JIPSEEBCDIC + NEC JIPSEコード
AS-EBCDIK-JIPSEEBCDIK + NEC JIPSEコード
AS-EBCDIC-KEISEBCDIC + 日立KEISコード
シフトコードが間違っているためAS-EBCDIC-KEIS-2を使用してください
AS-EBCDIK-KEISEBCDIK + 日立KEISコード
シフトコードが間違っているためAS-EBCDIK-KEIS-2を使用してください
AS-EBCDIC-KEIS-2EBCDIC + 日立KEISコード
AS-EBCDIK-KEIS-2EBCDIK + 日立KEISコード

これらのキャラクタセットの定義は、基本的にWindows-31Jとの間でのコード変換のためにテーブルが作成されています。このため、 Windows-31Jとコード変換できるようにフローサービスで修正している部分があります。また、2バイト文字のテーブルに含まれているのは、 JIS X 208に含まれている文字のみです。

注意する文字

改行

0x15(NEL)は、\u0Aと相互にマッピングされます。これは0x15を\u85にマッピングするとUnicodeで改行としてうまく扱えない、UnicodeからWindows-31Jにマッピングした際に0x0Aにならずに改行として扱えないという問題があるためです。

円記号とバックスラッシュ

EBCDICの円記号は、\u5Cと相互にマッピングされます。これは\uA5にマッピングすると、UnicodeからWindows-31Jにマッピングした際に0x5Cにならずに円記号として扱えないという問題があるためです。また、バックスラッシュも\u5Cにマッピングされます。

チルダとオーバーライン

EBCDICのチルダは、\u7Eと相互にマッピングされます。また、オーバーラインも\u5Eにマッピングされます。これはWindows-31Jのマッピングで、\u7Eが0x7Eにマッピングされているためです。

「出力エンコーディング」プロパティ

ホスト系のキャラクタセットを扱うには、「出力エンコーディング」プロパティにフローサービス固有のエンコーディング名を直接入力します。

フィールド定義のデータ型

「出力エンコーディング」プロパティにフローサービス固有のエンコーディング名が指定されると、データ型プルダウンリストに「String(X)」と「String(N)」が追加されます。データ型は「String(X)」または「String(N)」のいずれかを選択します。

注意

出力時に、フローサービス上の文字列からString(N)文字列に変換する場合、指定文字コードで変換処理を行った後、シフトイン、シフトアウトを除去します。

入力時に、String(N)文字列からフローサービス上の文字(Unicode文字列)に変換する場合は、前後にシフトイン、シフトアウトを付加してから指定文字コードを使って変換処理を行います。したがって、String(N)型フィールドに半角文字を混在させると、入力時には文字化けするため注意が必要です。

 

▲ このページのトップへ