Thread 80 Mio Zeilen einlesen
(24 answers)
Opened by FanClub at 2013-07-16 10:17
Woran machst Du fest, dass ein Block mehrmals vorkommt? Nur die Produktnummer oder auch die Details?
Ich würde für so eine Datei einen XML-Parser nehmen, der für große Dateien geeignet ist. Hier habe ich mit XML::Twig gute Erfahrungen gemacht. Das hier als Anregung: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 #!/usr/bin/perl use strict; use warnings; use XML::Twig; my $file = 'test.xml'; my %seen; my $twig = XML::Twig->new( # twig_roots macht aus jedem <Produkt>-Block # ein eigenständiges "Objekt" # Für jeden Block wird die Methode "produkt" aufgerufen twig_roots => { Produkt => \&produkt, }, # gib einfach alles außerhalb der Produkt-Blöcke # aus. twig_print_outside_roots => 1, )->parsefile( $file ); sub produkt { my ($t,$elt) = @_; # hole die ProduktNummer my ($nr) = $elt->children( 'Produkt_Nummer' ); my $id = $nr->text; if ( $seen{$id}++ ) { # wenn es einen Block für die ProduktNummer bereits # gibt, dann lösche den aktuellen Block... $elt->delete; } else { # ansonsten gib ihn aus $elt->print; } # gib den Speicher frei $t->purge; } OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/) -- Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html Perl-Entwicklung: http://perl-services.de/ |