将文本文件导入SQL数据库

时间:2012-02-25 10:07:02

标签: mysql sql text-files

我有许多单独的文本文件,我想将其导入SQL数据库。数据不是逗号分隔,因此使用我的逗号导入数据的想法来排除。但是,数据跨越多行。参见下面的示例文本文件。请任何人可以告诉我如何导入特定数据,如编程和平均值,班次数等?

enter image description here

2 个答案:

答案 0 :(得分:0)

看起来你有一台机器生成的报告。理想的方法是让该机器生成不同的报告 - 没有'/////'或任何废话,只是您要导入的数据。因此,新报告的输出可能如下所示。

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'

答案 1 :(得分:-1)

您可以在C#中编写一个简单的应用程序,使用正则表达式解析文件的内容,将其转换为一行,并在需要时插入分号。