【发布时间】:2016-09-05 16:41:22
【问题描述】:
我有一个工作脚本,它可以解析 CSV 文件、清理数据并进行一些更改,然后再将其重新组合在一起。我正在使用的原始文件是逗号分隔的。但我刚刚收到了将要运行的所有实际文件,它们都是用管道分隔的。我需要做同样的事情,然后将它们重新组合成逗号分隔的文件。
首先,我有 -
#!/usr/bin/perl/
use strict;
use warnings;
use Data::Dumper;
use Time::Piece;
my $filename = 'records.csv';
open my $FH, $filename
or die "Could not read from $filename <$!>, program halting.";
# Read the header line.
chomp(my $line = <$FH>);
my @fields = split(/|/, $line);
print Dumper(@fields), $/;
my @data;
# Read the lines one by one.
while($line = <$FH>) {
chomp($line);
...解析我的数据,然后目前,我以此结束将数据放回文件中-
# put the records back
push @data, \@fields;
但是如何将数据以逗号分隔的形式放回?
【问题讨论】:
-
" 我也需要这样做,然后将它们作为逗号分隔的文件重新组合在一起" 不,你不需要,你只需要在管道上拆分数据而不是逗号,然后从那里照常进行。请不要尝试先从真实的输入文件重新创建“预期”输入文件,因为您将引入全新的错误层
-
由于您已经(可能)成功地将每一行拆分为字段,并且您已经知道如何拆分管道字符,因此您的其余代码应该保持不变。您问题的核心似乎是 “如何将数据以逗号分隔?” 但这与原始分隔符无关,您没有显示任何与此有关的代码那。请展示您尝试过的 Perl 代码并解释它为什么不适合您,并展示一些真实的输入和输出数据
-
@BigRedEO Borodin 说您不应该将文件转换为 CSV。只需将现有代码更改为以管道而不是逗号分隔即可。
-
@BigRedEO 将什么推回什么文件?您有一个包含输入数据的管道分隔文件。您的最终目标大概是解析文件以获取每个字段的内容并对其进行处理。根据您之前的问题,听起来您已经编写了一个预处理器来从 CSV 中删除逗号、引号等,这只是一个精心设计的解决方法,以避免使用像 Text::CSV 这样的正确 CSV 解析器。现在您正尝试将管道限制文件转换为 CSV,以便您的预处理器可以处理它,但这只是 另一个 hacky 解决方法,因为(续)跨度>
-
你可以修改你的预处理器来处理管道分隔的文件。您应该只下载 Text::CSV 的源代码并将其与您的脚本捆绑在一起,而不是所有这些基于变通办法的变通办法。 Text::CSV 只是一个 Perl 脚本,无需预处理器和预处理器。