TRNSYSのCSV読み込みでエラー

さっきまで読み込めていたファイルが読み込めない

TRNSYSのType9はCSVなどテキスト形式のデータファイルを読み込むコンポーネントです。計算用のデータの読み込みなどでよく使われます。

いつものようにType9でファイルを読み込もうしたら、いきなりエラー発生。既存のCSVのデータを変更しただけなんだが、はて?

エラーメッセージは以下のような内容。

*** Fatal Error at time   :         0.000000
    Generated by Unit     :     4
    Generated by Type     :     9
    Message               : Unable to correctly read from the supplied data file. Please check the file and re-run the simulation. The most likely cause of this problem is an empty or non-existent file.
提供されたデータファイルから正しく読み取れませんでした。ファイルを確認し、シミュレーションを再実行してください。この問題の最も可能性の高い原因は、空のファイルまたは存在しないファイルです。

CSVファイルの一部の値を変更しただけなので、空のファイルでもなければ存在しないファイルでもない。念のためメモ帳で開くと、データはちゃんと存在している。

と、しばらく考えてて気がついた。Excelで元データを編集して、保存する方法を間違えていた。

ExcelからCSV形式で保存する場合、2つ形式があります。

  • CSV UTF-8(コマン区切り)
  • CSV (コマン区切り)

後者が正解なんですが、うっかり前者で保存していたらしい。「CSV (コマン区切り)」で保存し直したら無事に読み込めました。

エラーの原因は?

以下、ファイルフォーマットの話なので、興味のある方向けの情報です。

Type9はANSI形式(ASCII形式)のテキストファイルを読み込みます。ExcelでCSVを保存する場合「CSV (コマン区切り)」を選ぶとANSI形式のファイルで保存されます。

「CSV UTF-8(コマン区切り)」を選ぶと、UTF-8形式で保存されます。Type9では対応していない形式なので上記のエラーが発生することになります。

余談ですが、UTF-8はANSI形式と英数字のデータは互換性があります。数値だけのデータであればANSI、UTF-8でも基本的に同じデータになります。実際、まったく同じデータなのでプログラム的には区別が付かない、というか区別しようがありません。

ところがExcelではUTF-8形式でファイルを保存すると、「BOM付きUTF-8」と呼ばれる形式で書き出します。BOMはbyte order mark(バイト順マーク)の意味で、ファイル形式の識別に使われます。前述の話と矛盾しているように聞こえますが、ANSI, UTF-8ファイルとして区別が付かないなら付くようにデータの先頭に識別用のデータを挿入します。識別データでファイルの種類の区別がつくので、これはこれでファイルに日本語のデータを含む場合は便利な仕組みです。

が、数値を扱うプログラムからすれば予想外のデータが追加されたファイルのため、却ってジャマになってしまう訳です。

動作環境

以下の環境で動作を確認しています。
Windows10 Pro(64bit, 20H2)
TRNSYS18.02.0002(64bit)
Microsoft® Excel® for Microsoft 365 MSO (16.0.13929.20222) 64 ビット

Pocket

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です