今回は、最近発生したトラブルからご紹介します。
帳票を作成するにあたり、帳票データの中身をソートしたり、帳票アプリが必要とするマスタデータの中身をソートしたりといった作業を、スクリプトなどで自動化するのは一般に行われていると思いますが、今回の騒動はソートの処理で発生しました。システムテストが完了し、本番直前リハーサルの段階、マスタデータのソート処理でエラーが発生したのです。数日後に迫る本番開始を控えて、現場は大騒ぎです。
使用したのは、Windowsのsortコマンド。エラーメッセージは、
「入力レコードが最大長を超えました。より大きい最大長を指定し
です。ソート対象のマスタデータを確認しましたが、これまでテストで正
レコード長も800byteちょっとですべてのレコードで一定で
いろいろ試してみたところ、
①1行目を削除すると正常に処理される
②1行目と2行目を入れ替えると正常に処理される
③10行目以降を削除すると、エラーメッセージは出なくなる。
が、
マイクロソフトに問い合わせたところ、ファイルの先頭512バイトで文字コードを自動認識し、データの並びによっては、UNICODEとして認識されることがあるようです。UNICODEの場合、改行コードは[0D][00][0A][00]です。今回のデータは通常のShift_JISなので、改行コードは[0D][0A]としています。
これをUNICODEとして認識してしまうと、改行コードが存在しないということになり、「入力レコードが最大長を超えました」というエラーになるらしいのです。回避策として考えられるのは、ファイルの先頭512バイト以内にUNICODEではないと判別できるデータを入れておくこと。コマンドの製造元によると、ファイル先頭に英数字を2文字入れるか、改行コードを入れるとよいそうです。古くから存在するOSのコマンドでもこんなことがあるのですね。コマンドが改修される見込みはないものの、先に知っていれば、回避もできます。
今回の事象は、ネット上でも情報が見つからなかったので、こちらに記載してみました。皆様のお役に立てれば幸いです。
Rankingランキング
New arrival新着
Keywordキーワード