Текстовый файл в 80-байтовом формате? - PullRequest
2 голосов
/ 28 сентября 2011

У меня проблема с подготовкой текстового файла для одного из наших поставщиков. У них проблемы с чтением файла; в соответствии с тем, что мне сказали, файл должен иметь формат 80 байт. Я считаю, что они используют систему мэйнфреймов, поэтому я уверен, что это как-то связано с этим.

Когда я создавал файл, я просто использовал для этого простую StreamWriter с WriteLine(), но если кто-то слышал об этой проблеме раньше, я мог бы воспользоваться некоторыми советами или кратким фрагментом кода относительно того, что мне нужно сделать по-другому / добавить, чтобы разместить их запрос.

Спасибо за любую помощь, которую вы можете предоставить.

Ответы [ 3 ]

2 голосов
/ 28 сентября 2011

Это возвращает воспоминания (о COBOL, EDI и других уродствах).

Это обычно означает, что каждая «запись» заканчивается на 0x0d + 0x0a (CRLF) или 0xa (LF), что переводится в следующий код:

writer.Write("{0}\r\n", record);
writer.Write("{0}\n", record);

Не используйте writer.WriteLine. В случае 80-байтового упакованного формата это зависит от поставщика. Обычно это означает, что «запись» должна содержать не более 80 байт (включая символы CRLF), иначе это приведет к увеличению объема буфера ввода на мэйнфрейме.

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

Вам также может потребоваться определенная кодировка, например ASCII или EBCDIC, если вам не повезло.

0 голосов
/ 28 сентября 2011

Вам необходимо получить больше информации от вашего поставщика.«80-байтовое завершение» может означать несколько разных вещей.

Как уже отмечали другие, они почти наверняка ожидают кодировку ASCII.Ограничение «80 байт» означает, что ни одна физическая строка не может иметь длину более 80 символов (т.е. не должно быть символов в столбце 80 или более).

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

Некоторые из них я работал с ожидаемыми логическими строками (то есть записями), которые будут завершеныCRLF, но физические линии заканчиваются только CR.Или просто НЧ.Поэтому запись длиной 120 символов будет закодирована следующим образом:

79 characters<CR>41 characters<CR><LF>

В некоторых случаях все строки заканчиваются CRLF, а конец записи обозначается пустой строкой.

Или они могут говорить о кодировке для печати в кавычках , хотя это маловероятно.

Серьезно, получите лучшее описание от поставщика.

0 голосов
/ 28 сентября 2011

Я помню, как использовал текстовые файлы с 80 столбцами ... вы уверены, что они говорят о байтах?Хорошо, если бы его один байт / символ был бы одинаковым.

Я бы поместил весь текст в одну строку, а затем использовал бы простой цикл, чтобы поместить перевод строки после 80 символов.

...