加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

xml – 在Perl中忽略’Unclosed Token’

发布时间:2020-12-15 23:55:12 所属栏目:百科 来源:网络整理
导读:我有一个2Gb CSV文件,其中第1列包含epoch中的时间,第二列包含10000行 XML文件(作为单行). 我想遍历此CSV的每一行,并将第二列XML保存到自己的文件中.我还使用XPath从XML文件中获取客户名称,因此我可以将文件命名为[CustomerName] – [第1列的时间] .xml.但是
我有一个2Gb CSV文件,其中第1列包含epoch中的时间,第二列包含10000行 XML文件(作为单行).

我想遍历此CSV的每一行,并将第二列XML保存到自己的文件中.我还使用XPath从XML文件中获取客户名称,因此我可以将文件命名为[CustomerName] – [第1列的时间] .xml.但是有些XML文件不是有效的XML而且我收到一个错误,上面写着Unclosed Token on Line ….是否有办法忽略该消息并让它跳过该文件?以下是我的Perl代码:

my $file = '../FILENAME.csv';
open my $info,$file or die "Could not open $file: $!";
my $count = 0;
$| = 1;

while( my $line = <$info>)  {
    $count++; if($count == 1) {next;} #Ignore headers
    $line =~ /(d+),"(.*?)"$/; #Load time into $1,XML file into $2
    my $time = $1;
    my $report = $2;
    $report =~ s/""/"/g; #Replace "" with "
    my $xp = XML::XPath->new(xml => $report);
    my $ext = $xp->getNodeText('/report/customer') . "-" . $time . ".xml"; #Generate filename with customer name and time
    write_file($ext,$report);
}
close $info;

我也愿意接受建议,以提高效率.

您可以尝试将令人不安的代码包含在eval中.例如:
eval {
  my $xp = XML::XPath->new(xml => $report);
  my $ext = $xp->getNodeText('/report/customer') . "-" . $time . ".xml"; #Generate filename with customer name and time
  write_file($ext,$report);
};
if ( $@ ) {
  printf "ERROR: $@";
}

以下代码:

$count++; if($count == 1) {next;} #Ignore headers
$line =~ /(d+),XML file into $2
my $time = $1;
my $report = $2;

可以缩短为:

next if ++$count == 1; #Ignore headers
my ($time,$report) = ($line =~ /(d+),"(.*)"$/); # time,XML file

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读