FixedLength
FixedLengthストリームは、固定長データを扱うためのストリームです。FixedLengtストリームのみEBCDICエンコーディングを扱うことができます。
ストリームプロパティ
プロパティ名 | 値 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
読込み開始行 | データのうちレコードとして処理する先頭行数を指定します。例えば、データの1行目が不要の固定長データの場合、2を指定すると1行目を飛ばして2行目からをストリームとして出力します。初期値は1です。 | ||||||||||||
フィールド数 | レコードのフィールド数を指定します。指定すると、フィールド定義で指定した数分のフィールドが用意されます。フィールド名には「field数字」のようにfieldに1からの数字を付加した名前で定義されます。初期値は3です。 | ||||||||||||
出力エンコーディング |
ストリームのエンコーディングを指定します。 ホスト系のデータを扱うためのエンコーディングを、フローサービス固有のエンコーディング名を使って指定することができます。指定するには、フローサービス固有のエンコーディング名を直接入力します。詳しくは、下記「フローサービス固有のエンコーディング名」を参照してください。
|
||||||||||||
レコード区切り | レコードの区切りを指定します。以下の区切りが指定できます。区切りを選択すると、プロパティの表示が切り替わります。
|
||||||||||||
改行コード | レコード区切りプロパティが「改行」の場合、レコードの区切りとなる改行コードを指定します。 ※外部からストリームを読み込む場合は、必ずしも改行コードが指定した改行コードである必要はありません。また、読み込み時にはCR+LFの改行コードには対応していません。
|
||||||||||||
レコード長 | レコード区切りプロパティが「レコード長」の場合、レコードの区切りとなる長さを指定します。初期値は256です。 | ||||||||||||
パック10進の符号の有無 | パック10進の符号の有無を指定します。
|
||||||||||||
パック10進の符号書式 | パック10進の符号の書式を指定します。
|
||||||||||||
ゾーン10進の符号の有無 | ゾーン10進の符号の有無を指定します。
|
||||||||||||
ゾーン10進の符号書式 | ゾーン10進の符号の書式を指定します。入出力とも同じ動作をします。
出力エンコーディングプロパティに「ebcdic」以外が指定された場合にのみ有効です。
|
||||||||||||
省メモリモード | ファイルを読み込む時に即時に解析するかどうかを指定します。 固定長ファイルに含まれる合計フィールド数が非常に多くなる場合、ファイル読み込み時に即時に解析すると大量のメモリが必要になることがあります。そのような場合に「はい」を選択するとメモリ使用量が抑えられます。
|
フィールド定義
フィールド名、データ型、開始位置、長さ、小数点位置を定義します。
フィールド名 | フィールドの名前を指定します。 | ||||
---|---|---|---|---|---|
データ型 | String、Boolean、Integer、Double、Decimal、DateTime、Binary、ZonedDecimal、PackedDecimalのいずれか。 「出力エンコーディング」プロパティにフローサービス固有のエンコーディング名を指定した場合、「String(X)」と「String(N)」が追加表示され、この2種類のいずれかを選択します。
|
||||
開始位置 | レコードの先頭からのフィールド位置のインデックスを0ベースで指定します。 | ||||
長さ | 長さをバイト数で指定します。ただし、「出力エンコーディング」プロパティに「utf-16」を入力した場合は文字数で指定します。 | ||||
小数点位置 | データ型がZonedDecimalまたはPackedDecimalの場合、小数点位置を指定します。それ以外のデータ型では使用しません。 |
注意
フィールド名に利用できる文字列として以下の条件があります。
/および半角空白を除く文字が使用可能
- 名前の長さには制限なし
- 英字の大文字と小文字は区別される
- 日本語は使用可能
メモ
- レコード区切りプロパティが「改行」で、外部からストリームを読み込んだ場合にフィールド定義のフィールド数より読み込んだフィールド数が少ないとき、nullが埋められます。フィールド定義のフィールド数より読み込んだフィールド数が多いとき、そのフィールドは無視します。
- レコード区切りプロパティが「レコード長」で、外部からストリームを読み込んだ場合にレコード長プロパティの長さより読み込んだ長さが短いとき、空白が埋められます。
フローサービス固有のエンコーディング名
フローサービスではホスト系のデータを扱うための固有のエンコーディング名が定義されています。現在定義されているエンコーディング名とそのキャラクタセットは以下の通りです。
AS-CP00930 | IBM CP00930(CP00290 + CP00300) |
---|---|
AS-CP00930-EX | AS-CP00930にOSがWindowsの場合の調整を加えたもの |
AS-CP00939 | IBM CP00939(CP01027 + CP00300) |
AS-EBCDIC-JEF | EBCDIC + 富士通JEFコード |
AS-EBCDIK-JEF | EBCDIK + 富士通JEFコード |
AS-EBCDIC-JIPSE | EBCDIC + NEC JIPSEコード |
AS-EBCDIK-JIPSE | EBCDIK + NEC JIPSEコード |
AS-EBCDIC-KEIS | EBCDIC + 日立KEISコード シフトコードが間違っているためAS-EBCDIC-KEIS-2を使用してください |
AS-EBCDIK-KEIS | EBCDIK + 日立KEISコード シフトコードが間違っているためAS-EBCDIK-KEIS-2を使用してください |
AS-EBCDIC-KEIS-2 | EBCDIC + 日立KEISコード |
AS-EBCDIK-KEIS-2 | EBCDIK + 日立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)型フィールドに半角文字を混在させると、入力時には文字化けするため注意が必要です。