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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top