Анализ очень беспокойного файла с разделителями - PullRequest
6 голосов
/ 29 декабря 2011

Я пытаюсь помочь моему отцу - он дал мне экспорт из приложения планирования на его работе.Мы пытаемся выяснить, сможем ли мы импортировать его в базу данных mysql, чтобы его / коллеги могли сотрудничать с ним в Интернете.

Я пробовал несколько различных методов, но ни один из них не работает должным образом - иэто не моя специальность

Экспорт можно посмотреть здесь: http://roikingon.com/export.txt

Любая помощь / совет о том, как выполнить анализ, будет принята с благодарностью!

Спасибо !!

Ответы [ 4 ]

2 голосов
/ 29 декабря 2011

Я попытался написать (несколько динамический) анализатор с фиксированными столбцами.Посмотрите: http://codepad.org/oAiKD0e7 (это слишком долго для SO, но в основном это просто "данные").

Что я заметил

  • Text-Data - этовыровнено по левому краю с отступом справа, как "hello___" (_ = пробел)
  • Числовые данные выровнены по правому краю с отступом слева "___42"

Если вы хотитеиспользуйте мой код, но еще есть чем заняться:

  • Типы записей 12.x имеют переменное количество столбцов (после некоторых статических столбцов), вам придется реализовать для него другой «обработчик»
  • Некоторые из моей ширины, скорее всего, неверныЯ думаю, что существует система (например, числа длиной 4 символа и длиной текста 8 символов, с некоторыми вариациями для особых случаев).Кто-то со знанием предметной области и несколькими примерами файлов может определить столбцы.
  • Вывод необработанных данных - это только первый шаг, вам необходимо сопоставить необработанные данные с некоторой полезной моделью и записать эту модельв базу данных.
2 голосов
/ 29 декабря 2011

С этой файловой структурой вам, в основном, необходим реинжиниринг проприетарного формата.Да, он разделен пробелом, но формат не соответствует никаким стандартам, таким как CSV, YAML и т. Д. Он полностью запатентован тем, что кажется заголовком и отдельным разделом с собственными заголовками.

Я думаюЛучше всего попытаться выяснить, можно ли выполнить какой-либо другой вид экспорта, например, Excel или XML, и работать с ним.Если нет, посмотрите, есть ли какой-нибудь вывод html, который можно отсканировать на экране, вставить в Excel и посмотреть, что вы получите.

Из-за всего, что я упомянул выше, это будет ОЧЕНЬ сложнофайл в его текущей форме во что-то, что может быть разумно импортировано в базу данных.(Обратите внимание, что из структуры файла потребуется несколько таблиц.)

1 голос
/ 29 декабря 2011

Откройте его с помощью Excel и сохраните как разделенный запятыми.Относитесь к последовательным разделителям как к одному или нет.Затем сохраните его с помощью Excel как csv, который будет разделен запятыми, и его будет легче импортировать в mysql.

РЕДАКТИРОВАТЬ: Парень, который говорит использовать preg_split в "[+]", дает вам по существу тот же ответкак я только что сделал выше.

Вопрос в том, что делать после этого.

Вы уже определили, сколько существует "типов строк"?После того как вы определили это и определили их характеристики, вам будет гораздо проще написать код для его прохождения.

Если вы сохраните его в csv, вы можете использовать функцию PHP fgetcsv и связанные с ней функции.Для каждой строки вы должны проверять ее тип и выполнять операции в зависимости от типа.

Я заметил, что ваши строки данных могут быть разделены на наличие или отсутствие данных первого столбца "."так вот пример того, как вы можете перебрать файл.

while ($ row = fgetcsv ($ file_handle)) {if (strpos ($ row [0], '.') === false){// сделать что-то} else {// сделать что-то еще}}

«сделать что-то» будет что-то вроде «CREATE TABLE table_$row[0]» или «INSERT INTO table» и т. д.

Хорошо, и вот еще несколько замечаний:

Ваш файл действительно похож на несколько файлов, склеенных вместе.Он содержит несколько форматов.Обратите внимание, что все строки, начинающиеся с «4», далее имеют четырехбуквенное сокращение компании, за которым следует полное название компании.Одним из них является "Како".Если вы ищете «caco», вы найдете его в нескольких «таблицах» в файле.

Я также заметил, что "smuwtfa" (дни недели) разбросаны вокруг.

Используйте подобные подсказки, чтобы определить логику того, как обрабатывать каждую строку.

1 голос
/ 29 декабря 2011

Вы можете использовать разделение с регулярным выражением (ноль или более пробелов).

Я постараюсь сообщить вам.

Кажется, что нет структуры с вашими данными.

$data = "12.1  0    1144713      751  17  Y   8  517  526  537  542  550  556  561  567                                     17 ";

$arr = preg_split("/ +/", $data);
print_r($arr);

Array
(
    [0] => 12.1
    [1] => 0
    [2] => 1144713
    [3] => 751
    [4] => 17
    [5] => Y
    [6] => 8
    [7] => 517
    [8] => 526
    [9] => 537
    [10] => 542
    [11] => 550
    [12] => 556
    [13] => 561
    [14] => 567
    [15] => 17
    [16] =>
)

Попробуйте это preg_split("/ +/", $data);, которая разделяет строку на ноль или более пробелов, тогда у вас будет хороший массив, который вы можете обработать. Но, глядя на ваши данные, структуры нет, поэтому вам нужно будет знать, какой элемент массива соответствует каким данным.

Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...