如何在使用XML::Parser解析大型XML文件时查看进度?

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

我使用以下代码来解析相当大的xml文件(>50GB):

问题是解析需要很长时间,我想得到一些进度表


我更喜欢一种不需要首先扫描整个文件就可以得到总计数的方法-例如,输入文件中的当前位置将是完美的,因为我可以简单地在开始时检查文件的总大小,然后在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);
}