C# кодирует файл в EBCDIC с упакованными десятичными знаками

StackOverflow https://stackoverflow.com/questions/6022517

Вопрос

Я должен подготовить файл для внешнего объекта, и этот объект использует мэйнфрейм IBM с COBOL и требует, чтобы файл был закодирован в EBCDIC.Я создаю файл на C#.Я предполагаю, что это вопрос из двух частей... во-первых, достаточен ли приведенный ниже код для гарантии того, что файл будет сгенерирован таким образом, чтобы они могли его прочитать?

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

Во-вторых, для нескольких полей в файле требуется упакованное десятичное число в формате S(9)13 COMP-3.Поскольку я уже указал кодировку EBCDIC, могу ли я просто записать десятичное число (например1234500000001) в файл с помощью:

sw.WriteLine("1234500000001C"); 

...и правильно ли это получилось в сгенерированном файле?

Никогда ничего не делал с EBCDIC или COMP-3.

Это было полезно?

Решение

Этот код должен создать файл EBCDIC просто отлично.Обычно это не нужно, поскольку процесс FTP обычно преобразует файл автоматически из ASCII на EBCDIC, но если это не так, то файл, который вы создаете, должен быть правильным и может быть передан как двоичный, а не текст. .

Написание номера в виде текста с соответствующими заменами для удовлетворения Mainframe Zoned подписанный десятичный формат является правильной процедурой.Конечно, изготовление этих заместителей является болью, но написание их в виде строки, как вы делаете правильный способ получить его в файл, который может прочитать мэйнфрейм.

Другие советы

Во-вторых, для нескольких полей в файле требуется упакованное десятичное число в формате S(9)13 COMP-3.Поскольку я уже указал кодировку EBCDIC, могу ли я просто записать десятичное число (например1234500000001) в файл с помощью:

sw.WriteLine("1234500000001C");

...и правильно ли это получилось в сгенерированном файле?

Нет, ты не можешь.Этот оператор записывал бы байты EBCDIC:

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

Но это поле является COMP-3.Это не закодированные символы;это BCD со знаком nybble (C=положительный, D = отрицательный, F=без знака).

12 34 50 00 00 00 1C

Предполагая, что кодовая страница 37 верна, вы мог запишите это в файл, используя строку "\u0012\u0094&\u0000\u0000\u001C", но было бы гораздо разумнее записать эти нетекстовые поля в двоичном режиме.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top