Разобрать EDI-файл с помощью php / mysql
У меня есть 40-строчный EDI-файл (фиксированной длины), который я должен проанализировать в формате CSV. Если вы знаете edi, вы знаете, что каждый элемент имеет свою фиксированную длину.
Я новичок в разборе EDI и просто нужно немного помочь. Моя первая мысль - создать таблицу, которая будет содержать длины элементов в виде массива или как таковой.
Table EDIInfo
EDI_ID | EDI_ElemLengths
1 | 3,22,7s2,30,30,22
2 | 30,5s2,9s2,3,1,23
** s в приведенном выше массиве обозначает десятичную дробь на втором месте справа.
Поэтому, как только я получу эти данные в базу данных, я не уверен, как вытащить их, чтобы применить к файлу, который я нашел на моем сервере. На данный момент файл не имеет расширения, это простой текстовый файл. Я хотел бы разобрать его в новый файл XXXX.csv в том же напрямую.
Любые ссылки на Tuts или любую помощь / направление будет принята с благодарностью.
Если вы не знаете EDI, это в основном текстовый файл с "записью" в каждой строке, состоящей из "элементов". Каждому "элементу" разрешено фиксированное количество символов в этой строке, даже если он не занимает все свое выделенное пространство. Элемент похож на поле (как определено поле, например, varchar 64, элемент определяется количеством пробелов, которые ему разрешено использовать в текстовом файле). Элементы соприкасаются друг с другом, за пределами выделения элементов нет разделителей.
Спасибо
1 ответ
Элементы EDI не имеют "фиксированной длины" по традиционному определению. Не уверен, откуда у тебя эта идея. Ваше утверждение: "Если вы знаете edi, вы знаете, что каждый элемент имеет свою фиксированную длину". ложно Ваше утверждение: "это в основном текстовый файл с" записью "на каждой строке, составленной из" элементов ", также неверен. Если ваш терминатор сегмента является CR или LF, ваш текстовый редактор будет отображать его как сегмент на строку. Что если ваш терминатор сегмента был тильдой (~)? Тогда ваш файл будет текстовым потоком.
Согласно словарю EDI, элемент может иметь значение min / max. Если элемент имеет min 4 / max 8, элемент имеет переменную длину, так как он не дополняет до 8 символов. EDI - это структурированный файл с разделителями. Единственный сегмент фиксированной длины - это ISA (в ANSI X12)
Если вы работаете с ANSI X12, есть три разделителя: сегмент, элемент и подэлемент. Вы можете найти их, анализируя сегмент ISA. Как только у вас есть разделители, вы можете проанализировать остальную часть файла. Если вы анализируете через разделители, вам нужно беспокоиться только о длине элемента, если вы проверяете синтаксис по словарю стандартов - то, что вам, вероятно, не интересно делать.
Если вы работаете с EDIFACT, применима та же общая идея (вы получаете разделители из оболочки, но может быть шесть разделителей). Я только предполагаю, что вы работаете с ANSI X12.
Там есть множество парсеров. Вы заново изобретаете колесо. Существующие парсеры, вероятно, даже имеют генерацию FA и встроенные инструменты коммуникации. Если вы смотрите на много необработанных данных EDI и вам нужен контекст, чтобы понять, что эти данные означают, посмотрите на этот бесплатный инструмент EDI Notepad: http: // liaison. ком / продукты / интегрировать / еди-блокнота