2012-02-25 71 views
-2

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

enter image description here

回答

-1

你可以写在C#中的简单应用程序来解析使用正则表达式的文件的内容,把它变成一条线,并在需要插入分号。

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' 
+0

你知道你可以使用逗号导入数据,是否有通过查看空格数量或固定长度导入数据的事情? – Blob 2012-02-27 10:52:40

+0

是的,* I *可以导入固定宽度的数据,我相信OP可以导入固定宽度的数据。但他没有固定宽度的数据。他有一个已被保存到文件的报告。 – 2012-02-27 11:08:22

+0

你好,我还在为这个而苦苦挣扎,并且研究过AWK和AWKA,但还是输了。我只是想知道是否有任何教程或更简单的方法从每个文本文件中提取特定的数据?谢谢 – Blob 2012-03-20 09:57:21

相关问题