Pergunta

Eu tenho que preparar um arquivo para uma entidade externa, e esta entidade usa um mainframe IBM com COBOL e requer que o arquivo a ser codificado em EBCDIC.Estou criando o arquivo em C#.Eu acho que esta é uma pergunta de duas partes...em primeiro lugar, está o código abaixo suficiente para garantir que o arquivo será gerado de uma forma que eles podem ler?

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

Em segundo lugar, vários campos no arquivo de exigir decimal compactado no formato de S(9)13 COMP-3.Como eu já tiver especificado codificação EBCDIC, posso apenas escrever o número decimal (por exemplo,1234500000001) para o arquivo usando:

sw.WriteLine("1234500000001C"); 

(...) e se corretamente no arquivo gerado?

Nunca fiz nada com EBCDIC ou COMP-3.

Foi útil?

Solução

Que código deve criar um EBCDIC arquivo apenas multa.Isso geralmente não é necessário, desde o processo de FTP normalmente irá converter o arquivo automaticamente, a partir de ASCII para EBCDIC, mas se não for o caso, em seguida, o arquivo que você está criando deve ser correta e pode ser transmitido como binário em vez de texto.

Escrever o número como texto com as substituições apropriadas para satisfazer o mainframe zoneado assinado formato decimal é o procedimento correto.Claro, fazendo com que estes substituions é uma dor, mas escrever como uma seqüência de caracteres como você está fazendo é o caminho certo para obtê-lo para o arquivo que o mainframe pode ler.

Outras dicas

Em segundo lugar, vários campos no arquivo exigem packed decimal, no formato S(9)13 COMP-3.Desde já especificado codificação EBCDIC, posso apenas escrever o número decimal (por exemplo,1234500000001) para o arquivo usando:

sw.WriteLine("1234500000001C");

(...) e se corretamente em o arquivo gerado?

Não, você não pode.Essa declaração deve escrever o EBCDIC bytes:

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

Mas este campo é COMP-3.Que não caracteres codificados;é BCD com um sinal nybble (C=positivo, D=negativa, F=não assinado).

12 34 50 00 00 00 1C

Supondo que a página de código 37 está correto, você poderia escrevo isto para o arquivo usando a seqüência de caracteres "\u0012\u0094&\u0000\u0000\u001C", mas faria muito mais sentido escrever estes campos não-texto em modo binário.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top