文件关闭不起作用

时间:2016-07-05 09:33:53

标签: perl csv

我的perl脚本有点问题。我正在尝试将HTML文件的内容转换为CSV。那部分不是问题。我正在为2个HTML文件做同样的事情,并期望2个CSV文件。一切都很好,除了一件事。第一个CSV文件非常好,但是第二个CSV文件包含第一个文本中的所有文本第二个文本....我粘贴了我的脚本并删除了数据提取和HTML下载的行。所以下面剩下的部分是普通文件处理......我在这里缺少什么????

#!/usr/bin/perl

..
my $saveFileName = "x";
my $saveCsvName = "x";

sub parse_page{      
  open(CSV, ">".$saveCsvName);
  my $tree = HTML::TreeBuilder->new();
  $tree->parse_file($saveFileName);
  my @adds = $tree->look_down(sub { lc($_[0]->attr('class')) eq 'ad_row' });
  foreach $add(@adds){ print CSV $stuff."\n";  } #do stuff and print  
  $tree->delete;
  close(CSV);
}

# Main -----------------------------------------------------
$saveFileName = "A_".$vandaag.".html";
$saveCsvName = "A_".$vandaag.".csv";
parse_page();

$saveFileName = "B_".$vandaag.".html";
$saveCsvName = "B_".$vandaag.".csv";
parse_page();

1 个答案:

答案 0 :(得分:5)

好的,在添加use strictuse warnings后,我必须声明一些我忘记的变量($add中的foreach只是其中之一)。其中一个非常讨厌。但在解决之后我的小问题就消失了......

令人讨厌的一个(在#c中使用未初始化的值):原来:

my @adds = $tree->look_down(sub { lc($_[0]->attr('class')) eq 'ad_row' });

应该是:

my @adds = $tree->look_down(sub { (defined $_[0]->attr('class')) and lc($_[0]->attr('class')) eq 'ad_row' });

获得支持!