2011-01-04 1 views
0

У меня есть набор текстовых файлов, содержащих личные данные. Я хочу использовать сценарий для их запуска и записи в базу данных mysql. Что я сделал до сих пор, так это прочитать текстовый файл в строке, взорвать строку в «", а затем запустить массив, чтобы найти нужную информацию. Есть пара проблем с этим, так что, возможно, кто-то знает лучшее решение alltogether.PHP Script для передачи текстового файла в базу данных

Текстовый файл базы выглядит следующим образом:

Name: Marius 
Address 1: Street 
Address 2: Town 
Address 3: Country 
etc 

Проблема в том, что у меня нет возможности узнать, как долго «ценность» в то есть стрит. Может быть просто «Somestreet» или «Some Street» или «Some Street 1337». Это касается практически всех областей.

Возможно, есть способ превратить этот текст в массив, где для каждого элемента в качестве ключа используется строка, заканчивающаяся на «:», и каждый следующий элемент без окончания «:» считается значением?

+1

Действительно ли записи действительно в одной строке? У них есть вкладка или какой-то подобный разделитель? – Dogbert

+0

Он варьируется, некоторые из них находятся на одной линии, остальные три на линию. Без разделителя, кроме пробела между словами – Marius

+0

Не могли бы вы разместить несколько строк реальных данных на pastebin.com? – Dogbert

ответ

2

Как Адам намекает на комментарии: если нет никакой вкладки, cr/lf или аналогичного разделителя, в вашей строке недостаточно информации для синтаксического анализа данных.

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

1 explode the string at ":" 
2 loop through the resulting array, where you should find a structure like this: 
    [some or no value][space or other delimiter][known key] 
2.1 remember the key from the previous loop (empty as default) 
2.2 since the keys should be unique, loop through the array of known keys 
2.2.1 if a key matches the current string structure from the right, you can 
    strip this key off the right side of the string, trim the string and you 
    have the current value 
2.2.2 if you found a value, put both into the result array: 
    $arr[previous key] = [current value] 

Это должно сделать трюк.

+0

Взорвать на: это хорошая идея, не думал об этом еще! – Marius

+0

Но это совсем не поможет, если вы не знаете ключевые строки ... –

+0

Я знаю ключевые строки, это просто значения, которые являются довольно случайными. Так что определенно стоит попробовать. – Marius

Смежные вопросы