Невозможно прочитать EDI-файл

Я могу прочитать файл EDI с помощью Smooks (1.5), когда он отформатирован для удобства чтения

ISA*SD*          *DFDF*          *SDFDSF*FHGFH       *44*GHGHGHG       *GHGH*GHGHGH*^*GHGHG*46345345*B*4*:~ 
GS*SS*2323*23232*232323*32323*1*X*FDFGDFGDF~
GE*YTRY*DF~ 
IEA*DF*DGHJGHHGG~

Чтобы прочитать это, я использовал следующие конфигурации

<medi:delimiters segment="&#10;" field="*" 
    component="^" sub-component="~" escape="?" />

Но это не удалось, когда я попытался прочитать ниже сегменты EDI (неотформатированный EDI) с той же конфигурацией разделителя

ISA*SD*          *DFDF*          *SDFDSF*FHGFH       *44*GHGHGHG       *GHGH*GHGHGH*^*GHGHG*46345345*B*4*:~GS*SS*2323*23232*232323*32323*1*X*FDFGDFGDF~GE*YTRY*DF~IEA*DF*DGHJGHHGG~

здесь проблема в том, что все коды сегментов находятся в одной строке. я знаю причину, по которой он не читает EDI сегменты. он не работает из-за сегмента конфигурации = "&#10". Можно ли прочитать эти типы сообщений EDI. Или это нереалистичное сообщение EDI? Я считаю, что возврат каретки и перевод строки не являются обязательными символами по стандарту EDI X12. Я хочу знать, как читать этот неотформатированный EDI и как настроить разделитель для этого неотформатированного ЭОД


1 ответ

Ваш сегмент ISA недействителен:

  • ISA03 имеет значение "DFDF", но не должен быть длиннее 2 символов
  • ISA05 имеет значение "SDFDSF", но не более 2 символов
  • ISA06 имеет значение "FHGFH "длиной 12 символов, но должно быть 15 (включая whitespacE).
  • ISA08 и ISA13 тоже один персонаж слишком короткий

Это отбрасывает весь сегмент, который от "I" до терминатора сегмента должен быть ровно 106 символов (не включая дополнительный трейлинг \r\n), но в итоге вы получите 108 (опять же, не включая возврат каретки или перевод строки). Сегмент ISA - единственный, который имеет эти ограничения - если он выключен, парсер не будет знать, как возможно проанализировать остальную часть файла. Я подозреваю, что вы редактировали свой ISA, чтобы попытаться анонимизировать его, но у вас почти наверняка есть те же проблемы (или некоторые из них) с вашим точным ISA - проверьте, что такое 106-й символ, и вы обнаружите, что это \r (или ASCII 10), поэтому Smooks принимает его как терминатор сегмента.

Другие вопросы по тегам