C # Codifica di un file in ebcdico con decimali confezionati
-
14-11-2019 - |
Domanda
Devo preparare un file per un'entità esterna e questa entità utilizza un mainframe IBM con Cobol e richiede il file da codificare in EBCDIC.Sto creando il file in c #.Immagino che questa sia una domanda in due parti ... Innanzitutto, è il codice sotto sufficiente per garantire che il file verrà generato in un modo che possono leggere?
StreamWriter sw = new StreamWriter(@"C:\EBCDICFileEquivalent.txt", false, Encoding.GetEncoding(37));
.
In secondo luogo, diversi campi nel file richiedono decimale imballato, nel formato S (9) 13 Comp-3.Dal momento che ho già specificato la codifica EBCDIC, posso semplicemente scrivere il numero decimale (ad esempio 1234500000001) al file utilizzando:
sw.WriteLine("1234500000001C");
.
... e fallo disattivare correttamente nel file generato?
non ho mai fatto nulla con EBCDIC o Comp-3.
Soluzione
Quel codice dovrebbe creare un file ebcdico solo bene.Questo di solito non è necessario, poiché il processo FTP di solito convertirà automaticamente il file da ASCII su EBCDIC, ma se non è così, il file che stai creando dovrebbe essere corretto e può essere trasmesso come binario piuttosto che testo. .
Scrivendo il numero come testo con le sostituzioni appropriate per soddisfare il formato decimale firmato di zone mainframe è la procedura corretta.Certo, rendendo questi sostitioni è un dolore, ma scrivendoli come una stringa come stai facendo è il modo giusto per ottenerlo nel file che il mainframe può leggere.
Altri suggerimenti
.secondamente, diversi campi nel file richiedono decimale imballato, nel formato S (9) 13 Comp-3.Dal momento che ho già Codifica EBCDIC specificata, posso solo Scrivi il numero decimale (ad esempio 1234500000001) al file usando:
sw.WriteLine("1234500000001C");
... e fallo si rivela correttamente in il file generato?
No, non puoi.Questa affermazione scriverà i byte ebcdici:
F1 F2 F3 F4 F5 F0 F0 F0 F0 F0 F0 F0 F1 C3
Ma questo campo è
COMP-3
.Non sono caratteri codificati;È BCD con un cartello NYBBLE (c= positivo, D= negativo, f= senza segno).
12 34 50 00 00 00 1C
Assuming code Page 37 è corretto, tu potrebbe Scrivilo al file utilizzando la stringa
"\u0012\u0094&\u0000\u0000\u001C"
, ma avrebbe molto più senso scrivere questi campi non testi in modalità binaria.