忽略Perl中的“未封闭令牌”

比扬

我有一个2Gb CSV文件,其中第1列包含时代,第二列包含10000+行XML文件(作为一行)。

我想遍历此CSV的每一行,并将第二列XML保存到其自己的文件中。我还使用XPath从XML文件获取客户名称,因此可以将文件命名为[CustomerName]-[time from Column 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+),"(.*?)"$/; #Load time into $1, XML file into $2
my $time = $1;
my $report = $2;

可以缩短为:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

CSS块中的未封闭报价

来自分类Dev

线程中未封闭的ZeroMQ套接字

来自分类Dev

Perl FileSelect忽略未使用的按钮

来自分类Dev

未封闭的括号突出显示Vim中的颜色

来自分类Dev

替换nodejs中未自封闭的br或img标签

来自分类Dev

如何在XML解析中检测未封闭的括号

来自分类Dev

未封闭的括号突出显示Vim中的颜色

来自分类Dev

ReasonML:未封闭的“(”

来自分类Dev

解析未封闭的}标签

来自分类Dev

未封闭的引号sql?

来自分类Dev

PatternSyntaxException未封闭的组

来自分类Dev

承载令牌未包含在SwaggerUI中

来自分类Dev

Codepen中的Coffeescript“未检测令牌”

来自分类Dev

忽略IntelliJ中未解决的引用

来自分类Dev

在Spring Boot中忽略特定Urls的承载令牌验证

来自分类Dev

查找未封闭的引号(“-”或“-”样式)

来自分类Dev

保护未封闭标签的评论

来自分类Dev

tinymce pagebreak未封闭div

来自分类Dev

在动态SQL中,“未封闭的引号”和“'附近的语法不正确”

来自分类Dev

Python中的封闭函数

来自分类Dev

德鲁伊中的封闭函数

来自分类Dev

Perl:在插入过程中忽略csv文件中的列

来自分类Dev

正则表达式中的perl意外令牌?

来自分类Dev

正则表达式中的perl意外令牌?

来自分类Dev

如何忽略Perl的readdir中的单点和双点条目?

来自分类Dev

如何在 perl 中忽略哈希的键序列

来自分类Dev

声明未保留在会话令牌中

来自分类Dev

未捕获的SyntaxError:“ HTML”按钮中的令牌无效或意外

来自分类Dev

真正的基本代码中的“未捕获的SyntaxError:意外的令牌<”