1

我有两个 CSV 文件,一个有很长的参考编号列表,另一个是每日订单列表。

每天,我需要将参考编号剪切并粘贴到日常订单中。显然,我只剪切了与订单一样多的参考编号,因此例如,如果有 20 个订单,我需要从另一个文件中获取 20 个参考编号并粘贴到我的订单文件中。我削减了这些数字,这样我们就不会在接下来的几天里重复。

我想自动化这个过程,但我不知道最好的方法。我正在运行 Windows 并使用 AWK 进行其他一些 csv 操作,但我对 AWK 不是很有经验,并且不确定这是否可能,所以我只是问是否有人对最佳解决方案有任何想法。

4

1 回答 1

2

正确解析 CSV 是一件非常棘手的事情。大多数困难来自解析内容中的引号、双引号、逗号、空格等错误。

我建议不要重新发明轮子,而是使用一些经过良好测试的库。我认为 awk 没有,但 Perl 有:DBD::CSV.

在 Windows 上,只需安装ActivePerl,它已经DBD::CSV默认安装。

while然后,使用这样的 Perl 代码检索数据并在循环内转换为其他格式:

use DBI;
my $dbh = DBI->connect("dbi:CSV:f_ext=.csv") or die $DBI::errstr;
my $sth = $dbh->prepare("SELECT * FROM mytable"); # access mytable.csv
$sth->execute();
while (my @row = $sth->fetchrow_array()) {
   print "id: $row[0], name: $row[1]\n";
}
# you can also access columns by name, like this:
# while (my $row = $sth->fetchrow_hashref()) {
#     print "id: $row->{id}, name: $row->{name}\n";
# }
$sth->finish();
$dbh->disconnect();

由于您提到您有 2 个输入 CSV 文件,您甚至可以使用 SQL 连接语句从两个表中同时获取正确连接的数据。

于 2013-05-29T09:22:01.993 回答