質問
FAQ記事「固定長ファイル読み取りを行う際のフォーマット定義について」を参考に、以下テキストファイルのフォーマット定義を設定したところ、「StructuredTextParseException: 指定されたフォーマットでファイルを読めませんでした。」のエラーが発生しました。
読み取り対象となるテキストファイルの文字コードはUTF-8で、固定長ウィザードで設定しているフィールドは「会員番号」、「氏名カナ」、「氏名(漢字)」、「生年月日」です。
エラーの原因と解決策を教えてください。
※読み取り対象のテキストファイルのデータイメージ
回答
固定長ファイル読み取り処理の場合、固定長ウィザードにて指定した長さ(バイト数)ごとにデータを区切って
読み取りが行われますが、固定長ウィザードで指定する各フィールドのバイト数がテキストファイルのデータと
一致していない場合は、「StructuredTextParseException」のエラーが発生します。
また、前提として、読み取り対象ファイルの文字コードがUTF-8の場合、半角文字/全角文字/全角スペースは
3バイトとなり、半角数字/半角スペースは1バイトとなります。
テキストファイルのデータイメージから、「氏名カナ」のフィールドは半角カナ文字数が固定ではないため、
UTF-8から別の文字コードに変換し、1文字あたりのバイト数と1スペースあたりのバイト数を揃える必要があります。
読み取り対象ファイルの文字コードがShift_JISの場合であれば、半角文字と半角スペースがどちらも同じ1バイトとなり、
「氏名カナ」のフィールドで半角カナ文字数が変動しても、同じバイト数として読み取ることが可能です。
そのため、一度可変長ファイル読み取り処理でファイルを読み取ってから、可変長ファイル書き込みにて
ファイルの文字コードをShift_JISに変換した上で、固定長ファイル読み取りを行ってください。
以下にサポートにて検証済みのスクリプト実装例をご紹介いたします。
あくまで一例となりますので、お客様のご要件に合わせて適宜ご調整ください。
■スクリプトの実装イメージ
■各コンポーネントの設定値
<可変長ファイル読み取り>
※「読み取り設定」タブの「エンコード」では、「UTF-8」で読み取ります。
可変長ウィザードの設定
<可変長ファイル書き込み>
※「書き込み設定」タブの「エンコード」では、「Shift_JIS」で書き込みます。
可変長ウィザードの設定
<固定長ファイル読み取り>
※「読み取り設定」タブの「エンコード」では、「Shift_JIS」で読み取ります。
固定長ウィザードの設定
コメント
0件のコメント
記事コメントは受け付けていません。