Импорт текстового файла в базу данных SQL - PullRequest
0 голосов
/ 25 февраля 2012

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

enter image description here

Ответы [ 2 ]

0 голосов
/ 25 февраля 2012

Похоже, у вас есть сгенерированный машиной отчет. Идеальный подход заключается в том, чтобы эта машина создала другой отчет - тот, у которого нет «/////» или чего-то подобного, только данные, которые вы хотите импортировать. Таким образом, вывод нового отчета может выглядеть следующим образом.

shift_num, prog_min, mean_sec, att_sec, adt_min
1, 600, 599, 658, 210
...

На практике, однако, часто "невозможно" получить подобные отчеты. (То есть, всегда возможно для машины, но часто люди не хотят.) Когда это происходит, используйте ваш любимый язык обработки текста, чтобы превратить отчет в полезные данные.

Мне нравится awk для такого рода вещей. Другие любят Perl.


Чтобы проиллюстрировать это, я набрал эту копию вашего отчета. (Сохранено как test.dat.)

ORDER   Nr FG68909                    Q.ty Ordered    99
...
                                         SHIFT Nr. 1

////////
PROGRAMMED                            MEAN

600 min                       JOB TIME        599 sec




AVERAGE Turnaround Time  658 sec
AVERAGE Delivery Time  210 mins

Тогда я написал эту программу на awk. Это делает много предположений о макете вашего отчета. Некоторые из них, вероятно, потерпят неудачу на реальных данных.

/SHIFT/ {shift = $NF}
/JOB TIME/ {
  programmed = sprintf("%d %s", $1, $2);
  mean = sprintf("%d %s", $(NF-1), $NF);
}
/AVERAGE Turnaround/ {  avg_turnaround = sprintf("%d %s", $(NF-1), $NF);}

# Assumes the line "AVERAGE Delivery" is also the end of the record.
/AVERAGE Delivery/ {  
  avg_delivery = sprintf("%d %s", $(NF-1), $NF);
  printf("%d, '%s', '%s', '%s', '%s'\n", shift, programmed, mean, avg_turnaround, avg_delivery);
  # Clear the vars for the next record.
  shift = "";
  programmed = "";
  mean = "";
  avg_turnaround = "";
  avg_delivery = "";
}

Выход. , .

$ awk -f test.awk test.dat
1, '600 min', '599 sec', '658 sec', '210 mins'
0 голосов
/ 25 февраля 2012

Вы можете написать простое приложение на C # для анализа содержимого файла с помощью регулярных выражений, преобразования его в одну строку и вставки точек с запятой, где это необходимо.

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