質問

外部エンティティ用のファイルを準備する必要があります。このエンティティは COBOL を備えた IBM メインフレームを使用しており、ファイルを EBCDIC でエンコードする必要があります。C#でファイルを作成しています。これは 2 つの部分からなる質問だと思います...まず、ファイルが読み取り可能な方法で生成されることを確認するには、以下のコードで十分ですか?

StreamWriter sw = new StreamWriter(@"C:\EBCDICFileEquivalent.txt", false, Encoding.GetEncoding(37));

次に、ファイル内のいくつかのフィールドでは、S(9)13 COMP-3 形式のパック 10 進数が必要です。すでに EBCDIC エンコードを指定しているので、10 進数を書き込むだけでよいでしょうか (例:1234500000001) を次を使用してファイルに追加します。

sw.WriteLine("1234500000001C"); 

...生成されたファイルでは正しく表示されていますか?

EBCDIC や COMP-3 を使ったことがありません。

役に立ちましたか?

解決

そのコードはeBCDICファイルを結成するべきです。FTPプロセスは通常ASCIIからEBCDICに自動的にファイルを自動的に変換するため、通常は必要ありませんが、そうでない場合は、作成しているファイルは正しくあり、テキストではなくバイナリとして送信される可能性があります。

メインフレームゾーン符号付き10進形式を満たすための適切な置換を持つテキストとして、数字を書き出すのは正しい手順です。もちろん、これらの置き換えは痛みですが、あなたがしているのと同じようにそれらを文字列として書くことは、メインフレームが読むことができるファイルに入れる正しい方法です。

他のヒント

第二に、ファイル内のいくつかのフィールドには、フォーマットs(9)13 comp-3で、小数点が詰まっています。eBCDICエンコードをすでに指定しているので、小数点以下を書くだけです(例:1234500000001) を次を使用してファイルに追加します。

sw.WriteLine("1234500000001C");

...そして、生成されたファイルで正しく判明しましたか?

いいえ、できません。このステートメントは、EBCDIC バイトを書き込みます。

F1 F2 F3 F4 F5 F0 F0 F0 F0 F0 F0 F0 F1 C3

しかし、この分野は、 COMP-3. 。それはエンコードされた文字ではありません。符号ニブル付きの BCD です (C= 正、D= 負、F= 符号なし)。

12 34 50 00 00 00 1C

コードページ 37 が正しいと仮定すると、 できた 文字列を使用してこれをファイルに書き込みます "\u0012\u0094&\u0000\u0000\u001C", ですが、これらの非テキストフィールドをバイナリモードで記述する方がはるかに合理的です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top