Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister
 
PerlMonks  

Reading through a large bunch of files

by Dr Manhattan (Beadle)
on Aug 23, 2013 at 10:39 UTC ( #1050628=perlquestion: print w/ replies, xml ) Need Help??
Dr Manhattan has asked for the wisdom of the Perl Monks concerning the following question:

Hi all

I am having some problems with reading through a bunch of xml files in a directory and processing them. I am using File::Find and File::Copy. The problem seems to be that only 1 file is being processed and then the script stops before getting to the others

#!/usr/bin/perl use strict; use warnings; use utf8; use XML::Twig; use Data::Dumper; use File::Find; use File::Copy; use Cwd; my $dir = getcwd; my %size; my %hash; find(sub {$size{$File::Find::name} = -s if -f;}, "$dir"); foreach my $files (keys %size) { if ($files =~ /(.*)(\.xml)$/) { $hash{$1}++; } } #foreach my $x (keys %hash) #{ # print "$x\n"; #} foreach my $file (keys %hash) { my $twig = new XML::Twig(TwigRoots => {title => 1, text => 1}); $twig->parsefile("$file.xml"); + open(Output, ">:utf8", "$file 2.xml") or die "can't open file $!\n +"; $twig->root->print(\*Output); close (Output); }

Any ideas? Like I said the script works perfectly for the first file it reads, and then it just stops. When I run the foreach loop that I commented out, all the file names that is supposed to be there is there, so I have no idea whats wrong.

Thanx in advance for any help. Much appreciated

Comment on Reading through a large bunch of files
Download Code
Replies are listed 'Oldest First'.
Re: Reading through a large bunch of files
by choroba (Canon) on Aug 23, 2013 at 11:03 UTC
    It works for me. What do you mean by "it just stops" - does it end? What is the exit status? Or does it hang?
    لսႽ ᥲᥒ⚪⟊Ⴙᘓᖇ Ꮅᘓᖇ⎱ Ⴙᥲ𝇋ƙᘓᖇ

      It reads in all of the files, processes the first file correctly as it should, then stop and exit without touching the other files

        I tried putting the xml files in a array instead

        my @filelist = (-f, <*.xml>); foreach my $file (@filelist) { print "Working on... $file\n"; my $twig = new XML::Twig(TwigRoots => {title => 1, text => 1}); $twig->parsefile($file); open(Output, ">:utf8", "2_$file") or die "can't open file $!\n"; + $twig->root->print(\*Output); close (Output); }

        And got the error message "Use of uninitialized value $_[0] in -f at C:/Perl/site/lib/XML/Twig.pm line 752."

Re: Reading through a large bunch of files
by Anonymous Monk on Aug 23, 2013 at 11:24 UTC

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://1050628]
Approved by hdb
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others chilling in the Monastery: (15)
As of 2015-07-07 16:41 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (91 votes), past polls