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.
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 C3COMP-3. Это не закодированные символы; это BCD со знаком nybble (C=положительный, D=отрицательный, F=без знака).
12 34 50 00 00 00 1CПредполагая, что кодовая страница 37 верна, вымогли бы записать это в файл, используя строку
"\u0012\u0094&\u0000\u0000\u001C", но было бы гораздо более разумно записать эти нетекстовые поля в двоичном режиме.
Comments