代码之家  ›  专栏  ›  技术社区  ›  user80168

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

  •  2
  • user80168  · 技术社区  · 15 年前

    use XML::Parser;
    
    my $p = new XML::Parser(
        'Handlers' => {
            'Start' => \&handle_start,
            'End'   => \&handle_end,            
            'Char'  => \&handle_char,
        }
    );
    $p->parsefile( 'source.xml' );
    
    ...
    
    sub handle_start {
        ...
    }
    

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

    1 回复  |  直到 15 年前
        1
  •  7
  •   Grant McLean    15 年前

    你可能在找 current_byte XML::Parser::Expat .

    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);
    }