如何在使用XML::Parser解析大型XML文件时查看进度?
我使用以下代码来解析相当大的xml文件(>50GB): 问题是解析需要很长时间,我想得到一些进度表如何在使用XML::Parser解析大型XML文件时查看进度?,xml,perl,parsing,progress,Xml,Perl,Parsing,Progress,我使用以下代码来解析相当大的xml文件(>50GB): 问题是解析需要很长时间,我想得到一些进度表 我更喜欢一种不需要首先扫描整个文件就可以得到总计数的方法-例如,输入文件中的当前位置将是完美的,因为我可以简单地在开始时检查文件的总大小,然后在handle_start()中检查当前位置,然后将其打印。您可能正在查找解析器对象的当前\u字节方法,该方法记录在中 因此,您可以在开始解析之前将文件大小保存在全局文件中: my $file_size = -s $input_file; 然后在处理程序中
我更喜欢一种不需要首先扫描整个文件就可以得到总计数的方法-例如,输入文件中的当前位置将是完美的,因为我可以简单地在开始时检查文件的总大小,然后在handle_start()中检查当前位置,然后将其打印。您可能正在查找解析器对象的
当前\u字节
方法,该方法记录在中
因此,您可以在开始解析之前将文件大小保存在全局文件中:
my $file_size = -s $input_file;
然后在处理程序中计算进度,如下所示:
sub handle_start {
my($parser, $element) = @_;
my $pos = $parser->current_byte;
printf("%-20s %5.1f%%\n", $element, $pos * 100 / $file_size);
}
谢谢。这正是我需要的。
sub handle_start {
my($parser, $element) = @_;
my $pos = $parser->current_byte;
printf("%-20s %5.1f%%\n", $element, $pos * 100 / $file_size);
}