我正在处理从网站爬取的文件,该文件保存为带引号字段的分号csv格式。最后一个字段包含嵌入式换行符。我一直在编写处理该文件的脚本。我对perl还比较新,最初尝试使用普通的perl脚本,但很快发现那样行不通。我进行了研究并发现应该使用Text::CSV模块。我找到了这些网站,解释了如何使用该模块:
以下是原始数据示例:
而我想要的是这个:
这将正确地打印带有换行符的字段,但并没有将它们移除。我该如何做?使用正则表达式替换换行符不起作用。下一个问题是,当我弄清楚如何清理该字段时,我该如何打印新文件?
http://perlmaven.com/how-to-read-a-csv-file-using-perl
http://perlmeme.org/tutorials/parsing_csv.html
http://metacpan.org/pod/Text::CSV#Embedded-newlines
基本上我想要实现的是正确读取文件,使得所有字段能够被正确地分隔,而不是在换行符处断开。然后将该字段中的换行符删除,并将其写入新文件。以下是原始数据示例:
"2030";"NH Amersfoort";"Stationsstraat 75";"3811 MH AMERSFOORT";"033-4221200";"www.nh-hotels.nl";"52.154316";"5.380036";"<UL class=stars><LI>
<LI>
<LI>
<LI></LI></UL>"
"2031";"NH Amsterdam Centre";"Stadhouderskade 7";"1054 ES AMSTERDAM";"020-6851351";"www.nh-hotels.com";"52.363075";"4.879458";"<UL class=stars><LI>
<LI>
<LI>
<LI></LI></UL>"
"2032";"NH Atlanta Rotterdam Hotel";"Aert van Nesstraat 4";"3012 CA ROTTERDAM";"010-2067800";"www.nh-hotels.com";"51.921028";"4.478619";"<UL class=stars><LI>
<LI>
<LI>
<LI></LI></UL>"
而我想要的是这个:
"2030";"NH Amersfoort";"Stationsstraat 75";"3811 MH AMERSFOORT";"033-4221200";"www.nh-hotels.nl";"52.154316";"5.380036";"<UL class=stars><LI><LI><LI><LI></LI></UL>"
"2031";"NH Amsterdam Centre";"Stadhouderskade 7";"1054 ES AMSTERDAM";"020-6851351";"www.nh-hotels.com";"52.363075";"4.879458";"<UL class=stars><LI><LI><LI><LI></LI></UL>"
"2032";"NH Atlanta Rotterdam Hotel";"Aert van Nesstraat 4";"3012 CA ROTTERDAM";"010-2067800";"www.nh-hotels.com";"51.921028";"4.478619";"<UL class=stars><LI><LI><LI><LI></LI></UL>"
这是我的完整脚本。我已经尝试了10种不同的选项和建议,但它们都没有起作用!
use strict;
use warnings;
use Text::CSV;
my $inputfile = shift || die "Give input and output names!\n";
my $outputfile = shift || die "Give output name!\n";
open my $infile, '<', $inputfile or die "Sourcefile in use / not found :$!\n";
open my $outfile, '>', $outputfile or die "Outputfile in use :$!\n";
my $csv = Text::CSV->new ({
binary => 1,
sep_char => ';'
});
while (my $elements = $csv->getline( $infile )) {
my $stars = $elements->[8];
#$ster =~ s/[\r\n]//g
print "$stars\n\n";
}
close $infile;
close $outfile;
这将正确地打印带有换行符的字段,但并没有将它们移除。我该如何做?使用正则表达式替换换行符不起作用。下一个问题是,当我弄清楚如何清理该字段时,我该如何打印新文件?
$ster
进行替换操作... 除非那是一个打字错误,否则你的问题就在那里。 - TLP