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



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



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


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



sw.WriteLine("1234500000001C"); 


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



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

544   2  

2 ответов:

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

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

Во-вторых, несколько полей в файле требуется упакованный десятичный код, в формате 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", но было бы гораздо более разумно записать эти нетекстовые поля в двоичном режиме.

Comments

    Ничего не найдено.