Невозможно прочитать 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=" " 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 сегменты. он не работает из-за сегмента конфигурации = "

". Можно ли прочитать эти типы сообщений 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 принимает его как терминатор сегмента.