Схема плоского файла BizTalk - как принять LF или CRLF в качестве разделителя строк - PullRequest
6 голосов
/ 22 апреля 2010

Наш клиент отправляет нам плоский файл в качестве входных данных, который мы затем принимаем и преобразуем в файл XML перед отправкой в ​​систему назначения.

Плоский файл состоит из нескольких строк, каждая строка ограничена LFили CRLF.

Как создать схему плоского файла, чтобы BizTalk мог интерпретировать каждую строку данных независимо от того, была ли строка разделена LF (0x0A) или CRLF (0x0D 0x0A)?

Ответы [ 3 ]

7 голосов
/ 22 апреля 2010

Проблема решена. Вот решение на случай, если кому-то еще интересно:

Поскольку LF и CRLF оба имеют общий символ LF, я установил разделитель строк как LF (0x0A). Это работает правильно для извлечения полных записей (с побочным эффектом наличия одного дополнительного символа CR в конце, когда CRLF является разделителем).

Можно избавиться от лишнего символа CR, используя пустое поле для поглощения символа CR или используя карту.

Обратите внимание, что, поскольку разделители LF и CRLF имеют разную длину (1 и 2 символа соответственно), мне пришлось внести еще пару изменений в схему, чтобы обеспечить правильную обработку обоих.

В моем сценарии каждая проанализированная запись строки содержит 8 позиционных полей, поэтому наличие дополнительного символа CR в конце приводило к ошибке из-за того, что Biztalk ожидает определенную длину для последнего поля, которое не учитывает дополнительный CR персонаж. Решение состоит в том, чтобы увеличить длину 8-го поля (которое в моем случае является полем заполнителя) на 1. Однако, чтобы по-прежнему иметь возможность обрабатывать разделители строк LF, убедитесь, что вы установили 'Разрешить досрочно Завершение ' признак ИСТИНА. Таким образом, ошибки не выдаются, если в последнем поле не хватает 1 символа от назначенной длины (если символ CR не был включен).

4 голосов
/ 22 апреля 2010

Простите, если я неправильно понял вопрос ... Звучит так, как будто каждая строка является записью, но некоторые строки заканчиваются на LF, а другие на CRLF, и вам нужно использовать обе в качестве разделителя на одном уровне? *

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

0 голосов
/ 29 мая 2018

Простой подход состоит в том, чтобы установить LF в качестве разделителя и CR в качестве символа заполнения на уровне схемы.Если схема работает при тестировании через Visual Studio, но в конвейере происходит ошибка, переверните значения Infix / Postfix.Нет необходимости выбирать Разрешить досрочное прекращение.

...