ho un errore "Memoria insufficiente" durante l'analisi di grandi dimensioni (100 Mb) file XML"Memoria insufficiente" durante l'analisi di grandi dimensioni (100 Mb) file XML utilizzando Perl
use strict;
use warnings;
use XML::Twig;
my $twig=XML::Twig->new();
my $data = XML::Twig->new
->parsefile("divisionhouserooms-v3.xml")
->simplify(keyattr => []);
my @good_division_numbers = qw(30 31 32 35 38);
foreach my $property (@{ $data->{DivisionHouseRoom}}) {
my $house_code = $property->{HouseCode};
print $house_code, "\n";
my $amount_of_bedrooms = 0;
foreach my $division (@{ $property->{Divisions}->{Division} }) {
next unless grep { $_ eq $division->{DivisionNumber} } @good_division_numbers;
$amount_of_bedrooms += $division->{DivisionQuantity};
}
open my $fh, ">>", "Result.csv" or die $!;
print $fh join("\t", $house_code, $amount_of_bedrooms), "\n";
close $fh;
}
Cosa posso fare risolvere questo problema di errore?
Per i grandi file XML, si dovrebbe fare affidamento su parser orientata evento, come SAX. Non lo so perl, ma sai se c'è qualcosa di simile? –
Non conosco questo modulo, ma lì su [CPAN] (http://search.cpan.org/perldoc?XML::Twig) loro menzionano come gestire file piccoli o enormi, e quello che hai qui è il versione per "piccolo". Quindi forse potresti adattare il tuo codice all'implementazione "enorme". – TLP
@Rubens - vedi sotto le risposte eccellenti, ma la versione breve è "Indubbiamente, Perl ha parser SAX". – DVK