Mysql 将文本文件导入SQL数据库

Mysql 将文本文件导入SQL数据库,mysql,sql,text-files,Mysql,Sql,Text Files,我有许多单独的文本文件,我想将它们导入SQL数据库。数据不是用逗号分隔的,因此排除了使用我的逗号导入数据的想法。但是,数据跨越多行。请参阅下面的示例文本文件。请告诉我如何导入特定数据,如编程值和平均值、班次号等 您可以用C语言编写一个简单的应用程序,使用正则表达式解析文件内容,将其转换为一行,并在需要时插入分号。看起来您有一个机器生成的报告。理想的方法是让这台机器生成一个不同的报告——一个没有“//”或任何垃圾的报告,只有您想要导入的数据。因此,新报告的输出可能如下所示 shift_num, p

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


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

看起来您有一个机器生成的报告。理想的方法是让这台机器生成一个不同的报告——一个没有“//”或任何垃圾的报告,只有您想要导入的数据。因此,新报告的输出可能如下所示

shift_num, prog_min, mean_sec, att_sec, adt_min
1, 600, 599, 658, 210
...
然而,在实践中,通常不“可能”得到这样的报告。(也就是说,机器总是有可能做到这一点,但通常人类是不愿意的。)当这种情况发生时,使用您最喜欢的文本处理语言将报告转化为可用数据

我喜欢这种东西的awk。其他人喜欢perl


为了举例说明,我输入了你报告的副本。(另存为test.dat。)

然后我写了这个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'

您知道可以使用逗号导入数据,是否存在通过查看空格数或固定长度导入数据的情况?是的,我可以导入固定宽度的数据,并且我确信OP可以导入固定宽度的数据。但他没有固定宽度的数据。他有一份报告已经保存到一个文件中。您好,我仍然在努力解决这一问题,并且已经研究了AWK和AWKA,但仍然相当丢失。我只是想知道是否有任何教程或更简单的方法可以从每个文本文件中提取特定数据?Thanks@user1091114:据我所知,没有教程。我为您编写了一个示例程序。但你最好从另一端着手解决这个问题。
$ awk -f test.awk test.dat
1, '600 min', '599 sec', '658 sec', '210 mins'