Question

Je dois préparer un fichier pour une entité extérieure, et cette entité utilise un mainframe IBM avec COBOL et nécessite que le fichier soit codé en EBCDIC.Je crée le fichier en C#.Je suppose qu'il s'agit d'une question en deux parties... premièrement, le code ci-dessous est-il suffisant pour garantir que le fichier sera généré d'une manière qu'ils peuvent lire ?

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

Deuxièmement, plusieurs champs du fichier nécessitent des décimales compressées, au format S(9)13 COMP-3.Puisque j'ai déjà spécifié le codage EBCDIC, puis-je simplement écrire le nombre décimal (par ex.1234500000001) au fichier en utilisant :

sw.WriteLine("1234500000001C"); 

...et que cela s'affiche correctement dans le fichier généré ?

Je n'ai jamais rien fait avec EBCDIC ou COMP-3.

Était-ce utile?

La solution

Ce code devrait créer un fichier EBCDIC bien.Cela n'est généralement pas nécessaire, car le processus FTP convertira généralement le fichier automatiquement à partir de ASCII à EBCDIC, mais si ce n'est pas le cas, le fichier que vous créez doit être correct et peut être transmis en tant que texte binaire plutôt que de texte.

Écrire le numéro en tant que texte avec les substitutions appropriées pour satisfaire le format décimal signé du Mainframe Signé, est la procédure correcte.Bien sûr, faire de ces substitutions est une douleur, mais les écrivez comme une chaîne que vous faites est la bonne façon de l'obtenir dans le fichier que le mainframe peut lire.

Autres conseils

Deuxièmement, plusieurs champs dans le fichier nécessitent une décimale emballée, au format S (9) 13 Comp-3.Comme j'ai déjà spécifié le codage EBCDIC, puis-je simplement écrire le numéro décimal (par exemple1234500000001) au fichier en utilisant :

sw.WriteLine("1234500000001C");

... et le faire s'avérer correctement dans le fichier généré?

Non, tu ne peux pas.Cette instruction écrirait les octets EBCDIC :

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

Mais ce champ est COMP-3.Ce ne sont pas des caractères codés ;c'est BCD avec un signe nybble (C=positif, D=négatif, F=non signé).

12 34 50 00 00 00 1C

En supposant que la page de codes 37 est correcte, vous pourrait écrivez ceci dans le fichier en utilisant la chaîne "\u0012\u0094&\u0000\u0000\u001C", mais il serait beaucoup plus logique d'écrire ces champs non textuels en mode binaire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top