C# a codificação de um arquivo em EBCDIC com decimais compactados
-
14-11-2019 - |
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.
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.