тип транзакции edi на самом деле не имеет значения (850 = заказ, 875 = продуктовый магазин). написав несколько парсеров edi, я нашел несколько вещей:
Вы должны быть в состоянии рассчитывать на то, что ISA (и только ISA) имеет фиксированную ширину (105 символов, если память служит).
снимите первые 105 символов. все, что после этого и до того, как первым появлением «GS» будет ваш терминатор строки (это может быть что угодно, включая 0x07 - звуковой сигнал - так что будьте внимательны, если вы выводите на стандартный вывод для отладки или у вас может быть куча звуковых сигналов из динамика). обычно это 1 или 2 символа, иногда их может быть больше (если человек, отправляющий вам данные, по какой-либо причине добавляет дополнительный терминатор). Как только у вас есть терминатор строки, вы можете получить разделитель (поле). я обычно вытаскиваю 3 символа линии GS и использую это, хотя 4-ой символ линии ISA должен также работать.
также помните, что вы можете получить файл с несколькими ISA в нем. в этом случае вы не можете рассчитывать на одинаковые разделители строк или полей в каждом ISA.
другая вещь ... также возможно (опять же, не уверен, что его спецификация), чтобы edi-файл имел переменную длину ISA. это очень редко, но я должен был принять это. если это произойдет, вы должны разобрать строку в ее полях. последнее поле в ISA имеет длину символа, поэтому по нему можно определить реальную длину ISA. если бы это был я, я бы об этом не беспокоился, если бы вы не увидели файл, подобный этому. это редкое явление.
то, что я сказал выше, может не относиться к букве "спецификации" ... то есть я не уверен, что законно иметь разные разделители строк в одном файле, но в разных ISA, но это технически возможно, и я приспосабливаю это, потому что я должен обработать файлы, которые проходят таким образом. edi процессор, который я использую, обрабатывает более 5000 файлов в день с более чем 3000 возможных источников данных (поэтому я вижу много странных вещей).
С наилучшими пожеланиями,
дон