私はウェブサイトからスクレイピングしたファイルに取り組んでいます。ファイルは引用符で囲まれたフィールドを持つセミコロン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;
これにより、改行が含まれるフィールドが正しく出力されますが、コースから削除されていません。それ、どうやったら出来るの?正規表現を使用して改行を置き換えても機能しません。次の質問は、そのフィールドをクリーンアップする方法を見つけたときです.. 新しいファイルを印刷するにはどうすればよいですか?