mysql — PHP извлекает данные из текста

У меня есть старая программа для Windows 95, которая экспортирует данные без номеров учетных записей, сезонных учетных записей, и если учетные записи содержат вспомогательную учетную запись.

Однако я могу распечатать информацию о клиенте и заметки, содержащие вышеуказанную информацию, в файл PDF и скопировать этот текст в блокнот; который я хотел бы извлечь данные.

Порядок данных: 1) заголовки страниц (мне эти данные не нужны.)

название компании

Информация для клиентов и заметки

Вычислено в понедельник, 10 августа 2015 года. Страница 1

2) стандартные заголовки и 3) данные после заголовков:

Имя Ser: Блок, Солнечный Маршрут: 1

Адрес: 3354 ASPEN RD. Частота: ежемесячно

Адрес: ST PETE, GA 33333 Неделя / день: Первый понедельник

Город Штат Zip: данные Время планирования (ЧЧ: ММ): 10: 00А

Ser Телефон: 555-1212 Обслуживание: ОСНОВНОЙ СЕРВИС

Законопроект о: БЛОК, СОЛНЕЧНЫЙ Оценить ($): 24,00

название компании

Информация для клиентов и заметки

Вычислено в понедельник, 10 августа 2015 г. Стр. 2

Адрес: 1123 Слай Термины: ДЕНЕЖНЫЕ СРЕДСТВА

Адрес: Ап Б

заметки: У Санни средняя собака

Не входите, если собака не выставлена

Затем он переходит к данным следующих клиентов и так далее.

Основные названия никогда не меняются, такие как имя, маршрут, адрес, заметки, телефон. Есть установленное количество заголовков в порядке; однако название заметки: может занимать 1-16 строк; и заголовок является случайным во всех данных. и хотя названия расположены по порядку, адрес называется 4 раза как для служебной строки 1 и строки 2, так и для адресов выставления счета — строка 1 и строка 2.

Я хотел бы установить переменные для этих названий и взять только то, что за ними; часть извлечения через PHP. Есть какой-либо способ сделать это?

1

Решение

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

Без известного / надежного разделителя между клиентами я не могу придумать, как можно получить заметки, не добавляя заголовки для следующей компании, если только вы не можете сделать что-то, включающее большую справочную таблицу со всеми именами клиентов.

У меня есть (некрасивое) регулярное выражение, которое может надежно помочь, насколько другие вещи, хотя:

$content='[the contents of your file]';
preg_match_all('~(Ser Name|Route|Address|Frequency|Week/Day|City State Zip|Sched Time \(HH:MM\)|Ser Phone|Service|Bill to|Rate \(\$\)|Terms|notes):\s*((?:(?!Ser Name|Route|Address|Frequency|Week/Day|City State Zip|Sched Time \(HH:MM\)|Ser Phone|Service|Bill to|Rate \(\$\)|Terms|notes).)+)~is',$content,$matches);

Так что это в основном ищет «заголовок» и помещает в первую захваченную группу, а затем сопоставляет до следующего «заголовка» и помещает его во вторую захваченную группу.

Возможно, это достаточно хорошо для вас, но TBH Я не могу придумать ничего лучшего, что вы можете сделать, если вы не можете улучшить свое извлечение до лучшего формата.

Таким образом, ваш пример данных будет выводить:

Array
(
[0] => Array
(
[0] => Ser Name: Block, Sunny
[1] => Route: 1


[2] => Address: 3354 ASPEN RD.
[3] => Frequency: Monthly


[4] => Address: ST PETE, GA 33333
[5] => Week/Day: First Monday


[6] => City State Zip: data
[7] => Sched Time (HH:MM): 10:00A


[8] => Ser Phone: 555-1212
[9] => Service: BASIC SERVICE


[10] => Bill to: BLOCK,SUNNY
[11] => Rate ($): 24.00

Company Name

Customer Information and Notes

Computed Monday, August 10 2015 Page 2


[12] => Address: 1123 Sligh
[13] => Terms: CASH


[14] => Address: Apt B


[15] => notes: Sunny has a mean dog
)

[1] => Array
(
[0] => Ser Name
[1] => Route
[2] => Address
[3] => Frequency
[4] => Address
[5] => Week/Day
[6] => City State Zip
[7] => Sched Time (HH:MM)
[8] => Ser Phone
[9] => Service
[10] => Bill to
[11] => Rate ($)
[12] => Address
[13] => Terms
[14] => Address
[15] => notes
)

[2] => Array
(
[0] => Block, Sunny
[1] => 1


[2] => 3354 ASPEN RD.
[3] => Monthly


[4] => ST PETE, GA 33333
[5] => First Monday


[6] => data
[7] => 10:00A


[8] => 555-1212
[9] => BASIC SERVICE


[10] => BLOCK,SUNNY
[11] => 24.00

Company Name

Customer Information and Notes

Computed Monday, August 10 2015 Page 2


[12] => 1123 Sligh
[13] => CASH


[14] => Apt B


[15] => Sunny has a mean dog
)

)
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]