Frage

Ich muss eine Datei für eine externe Entität vorbereiten, und diese Entität verwendet einen IBM-Mainframe mit COBOL und erfordert, dass die Datei in EBCDIC codiert wird.Ich erstelle die Datei in C #.Ich denke, das ist eine zweiteilige Frage...erstens, reicht der folgende Code aus, um sicherzustellen, dass die Datei so generiert wird, dass sie gelesen werden kann?

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

Zweitens erfordern mehrere Felder in der Datei gepackte Dezimalzahlen im Format S(9) 13 COMP-3.Da ich die EBCDIC-Codierung bereits angegeben habe, kann ich einfach die Dezimalzahl schreiben (z.1234500000001) in die Datei mit:

sw.WriteLine("1234500000001C"); 

...und ist es in der generierten Datei richtig ausgefallen?

Habe noch nie etwas mit EBCDIC oder COMP-3 gemacht.

War es hilfreich?

Lösung

Dieser Code sollte eine EBCDIC-Datei einfach fein erstellen.Dies ist in der Regel nicht erforderlich, da der FTP-Prozess normalerweise die Datei automatisch von ASCII in EBCDIC umwandelt, aber wenn dies nicht der Fall ist, dann sollte die Datei, die Sie erstellen, richtig sein und als binärer nicht als Text übertragen werden.

Schreiben Sie die Zahl als Text mit den entsprechenden Substitutionen, um das Zonenrahmen-Zoned-Signal-Dezimalformat zu erfüllen, ist das korrekte Verfahren.Natürlich ist es natürlich, diese Substituenten zu machen, aber das Schreiben von ihnen als String, wie es Ihnen geht, ist der richtige Weg, um es in die Datei zu bringen, in der der Mainframe lesen kann.

Andere Tipps

Zweitens mehrere Felder in der Datei erfordern gepackte Dezimalzahlen im Format S(9)13 KOMP-3.Da habe ich schon spezifizierte EBCDIC-Codierung, kann ich einfach schreiben Sie die Dezimalzahl (z.1234500000001) in die Datei mit:

sw.WriteLine("1234500000001C");

...und lassen Sie es richtig ausgehen die generierte Datei?

Nein, kannst du nicht.Diese Anweisung würde die EBCDIC-Bytes schreiben:

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

Aber dieses Feld ist COMP-3.Das sind keine codierten Zeichen;es ist BCD mit einem Vorzeichen nybble (C = positiv, D = negativ, F = vorzeichenlos).

12 34 50 00 00 00 1C

Angenommen, Codepage 37 ist korrekt, Sie können schreiben Sie dies mit der Zeichenfolge in die Datei "\u0012\u0094&\u0000\u0000\u001C", aber es wäre viel sinnvoller, diese Nicht-Text-Felder im Binärmodus zu schreiben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top