help merging perl code routines together for file processing

Posted by jdamae on Stack Overflow See other posts from Stack Overflow or by jdamae
Published on 2011-02-19T17:01:39Z Indexed on 2011/02/20 15:25 UTC
Read the original article Hit count: 312

Filed under:
|
|
|

I need some perl help in putting these (2) processes/code to work together. I was able to get them working individually to test, but I need help bringing them together especially with using the loop constructs. I'm not sure if I should go with foreach..anyways the code is below.

Also, any best practices would be great too as I'm learning this language. Thanks for your help.

Here's the process flow I am looking for:

-read a directory
-look for a particular file
-use the file name to strip out some key information to create a newly processed file
-process the input file
-create the newly processed file for each input file read (if i read in 10, I create 10 new files)

Sample Recs:

col1,col2,col3,col4,col5
[email protected],[email protected],8,2009-09-24 21:00:46,1
[email protected],[email protected],16,2007-08-18 22:53:12,33
[email protected],[email protected],16,2007-08-18 23:41:23,33

Here's my test code:

Target Filetype: `/backups/test/foo101.name.aue-foo_p002.20110124.csv`

Part 1:

my $target_dir = "/backups/test/";
opendir my $dh, $target_dir or die "can't opendir $target_dir: $!";
while (defined(my $file = readdir($dh))) {
    next if ($file =~ /^\.+$/);
    #Get filename attributes
    if ($file =~ /^foo(\d{3})\.name\.(\w{3})-foo_p(\d{1,4})\.\d+.csv$/) {
      print "$1\n";
      print "$2\n";
      print "$3\n";
    }
    print "$file\n";
}

Part 2:

use strict;
use Digest::MD5 qw(md5_hex);
#Create new file
open (NEWFILE, ">/backups/processed/foo$1.name.$2-foo_p$3.out") || die "cannot create file";
my $data = '';
my $line1 = <>;
chomp $line1;
my @heading = split /,/, $line1;
my ($sep1, $sep2, $eorec) = ( "^A", "^E", "^D");
while (<>)
{
    my $digest = md5_hex($data);
    chomp;
    my (@values) = split /,/;
    my $extra = "__mykey__$sep1$digest$sep2" ;
    $extra .= "$heading[$_]$sep1$values[$_]$sep2" for (0..scalar(@values));
    $data .= "$extra$eorec"; 
    print NEWFILE "$data";
}
#print $data;
close (NEWFILE);

© Stack Overflow or respective owner

Related posts about perl

Related posts about foreach