http://www.perlmonks.org?node_id=777300


in reply to Line by line parsing from one file, comparing line by line to another file

#!/usr/bin/perl #read each line in test1.txt into data_file array use strict; use warnings; my $data_file = "test1.txt"; my $names_file = "code.txt"; my $target_file = "target.txt"; my @data = (); # Cannot be the same name as above my @names_data = (); my @target = (); my $line = ''; open(DATA, $data_file) || die ("Could not open file! $!\n"); @data=<DATA>; close DATA; open(NAMES, $names_file) || die ("Could not open file! $!\n"); @names_data=<NAMES>; close NAMES; #read each line in code.txt into a names_file array foreach $line (@data) { #create loop that reads each ID in #code.txt (NAMES array), searches for #each in array elements for test1.txt #(DATA array), redirects a new #(NAMES).html for each element foreach ( @names_data ) { chomp; push @target, qq|$line<0> > +("$_<0>.html")\n|; #I do not understand what you are trying to do above... #Just modify the part between the pipes |...\n| to include #whatever variables you are wanting. } } open TARGET ">$target_file" || die "Cannot open target file. $!\n"; print TARGET @target; close TARGET;

Blessings,

~Polyglot~

  • Comment on Re: Line by line parsing from one file, comparing line by line to another file
  • Download Code

Replies are listed 'Best First'.
Re^2: Line by line parsing from one file, comparing line by line to another file
by web_developer (Initiate) on Jul 05, 2009 at 04:27 UTC
    OK, now I understand!
    Thank you, however, the variable is just the
    element (ie unique name (names).html), i added the <0>
    as I thought based on my ksh script, which is terribly slow
    required a (cnt(cnt+1)) with cnt(0).html as the
    output to redirct to.
    But I had to then had to rename 1.html, 2.html and so forth
    into a 12345.html, 34343.html for example
    I am going to test this to see what happens
Re^2: UPDATE: Line by line parsing from one file, comparing line by line to another file
by web_developer (Initiate) on Jul 05, 2009 at 04:57 UTC
    Upon my modifications, and executing the script, I get the following errors.
    $ perl.exe perl1.pl
    Variable "$NAMES" is not imported at perl1.pl line 36.
    Global symbol "$NAMES" requires explicit package name at perl1.pl line 36.
    Missing comma after first argument to open function at perl1.pl line 43, near ""
    Cannot open target file. $!\n";"
    Execution of perl1.pl aborted due to compilation errors. UPDATE- Modifications.
    #!/usr/bin/perl
    #read each line in test1.txt into data_file array

    use strict;
    use warnings;

    my $data_file = "test1.txt";
    my $names_file = "code.txt";
    my $target_file = "target.txt";
    my @data = (); # Cannot be the same name as above
    my @names_data = ();
    my @target = ();
    my $line = '';

    open(DATA, $data_file)
          || die ("Could not open file! $!\n");
    @data=<DATA>;
    close DATA;

    open(NAMES, $names_file)
          || die ("Could not open file! $!\n");
    @names_data=<NAMES>;
    close NAMES;

    #read each line in code.txt into a names_file array
    foreach $line (@data) {

    #create loop that reads each ID in
    #code.txt (NAMES array), searches for
    #each in array elements for test1.txt
    #(DATA array), redirects a new
    #(NAMES).html for each element
    foreach ( @names_data )
    {
    chomp;
    push @target, qq|$line<0> > +("$NAMES.html")\n|;
    #I do not understand what you are trying to do above...
    #Just modify the part between the pipes |...\n| to include
    #whatever variables you are wanting.
    }
    }
    open TARGET ">$target_file"
         || die "Cannot open target file. $!\n";
    print TARGET @target;
    close TARGET;