我有许多单独的文本文件,我想将其导入SQL数据库。数据不是逗号分隔,因此使用我的逗号导入数据的想法来排除。但是,数据跨越多行。参见下面的示例文本文件。请任何人可以告诉我如何导入特定数据,如编程和平均值,班次数等?
答案 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#中编写一个简单的应用程序,使用正则表达式解析文件的内容,将其转换为一行,并在需要时插入分号。