IFS にはさまざまな CCSID (0、37、819、1200、1252 など) を持つファイルが多数あり、ユーザーがこれらのファイルの内容。
私たちのシステム (V6R1) CCSID (DSPSYSVAL QCCSID) は 65535 [2] で、ジョブのデフォルト CCSID は 37 です。つまり、たとえば CCSID 819 (ASCII) を表示しようとすると、記号やランダムな色などのゴミが表示されます。
私はQtqIconvOpen APIを介してある CCSID から別の CCSID にデータを変換することに精通しているので、ファイルにデフォルトの CCSID とは異なる CCSID があることがわかっている場合は、それを変換できます。私はそれを行うために何年も前にコードを書きましたが、それはうまくいきます。
私の問題は、プログラムで IFS ファイルの CCSID を見つけることです。グーグルで検索した後、私が見つけた唯一の関連情報は、JamesA ( CPYFRMIMPF コマンドで使用される CCSID を決定する方法は? ) の Stackoverflow で、QSHELL で「ls -S」を実行して、CCSID を示すファイルのリストを取得できることを指摘していますとファイル名。
したがって、理論的には、 を実行しls -S filename
、出力を解析して CCSID を取得し、必要に応じてその CCSID を使用してデータの変換を実行できます。ただし、これは見苦しいハックであり、可能であれば IBM API を使用したいと考えています。
からリストを解析するよりも、そのようなAPIまたはよりエレガントなハックを知っている人はいますls -S filename
か?
[1] C API を使用open()
しread()
てclose()
、実際のデータの読み取りを行います。
[2] 65535 が悪い選択であることはわかっていますが、それについて私にできることは何もありません。