On 8/2/07, Mihir Kamdar <[EMAIL PROTECTED]> wrote: > > Hi, > > I have a requirement. There are files in the parent directory and they are > touched in the child directory. So in child directory there are 0 byte files > having the same name as the ones in the parent directory. I need to read > files in the child directory, and for each file present in the child > directory, I need to take that file from the parent directory, process that > file(remove duplicate lines from that file), and then write the output for > each of the input files in the output directory. > > I have written the code as below but it gives 0 byte files as output. > Please suggest what is wrong with the below code. > I have a fear that instead of processing files from parent directory, it > is processing files from the child directory. > > I am a newbie at perl. So i might have made silly mistakes. Request you to > correct them. > > > > #!/usr/bin/perl > > my $child_path = > '/home/user71/RangerDatasource/Customization/TelekomMalaysia/Scripts/Tests/cprogs/files/child' > ; > my $parent_path = > '/home/user71/RangerDatasource/Customization/TelekomMalaysia/Scripts/Tests/cprogs/files' > ; > my $write_path = > '/home/user71/RangerDatasource/Customization/TelekomMalaysia/Scripts/Tests/cprogs/files/output' > ; > my $line; > my %hash; > my @file; > my $key ; > my $value ; > > while () { > > opendir my $dh, $child_path or die $!; > > while (my $file = readdir $dh) { > > my $fname = "$child_path/$file"; > next unless -f $fname; > unless (exists $times{$file}){ > > opendir my $dh1,$parent_path or die $!; > > while (my $file = readdir $dh1) { > > while ($line=readline($file)) > { > my @cdr=split (/,/, $line) ; > > $hash{$cdr[2],$cdr[3],$cdr[6],$cdr[7]}=$line; #Add some more cdr key fields > if u want. > } > close $file ; > } > closedir $dh1 ; > > open (my $OUT_FILE,">","$write_path/$file.out") or die $!; > > while (($key, $value) = each %hash) > { > print $OUT_FILE $value; > } > close $OUT_FILE; > } > unlink("$parent_path/$file") ; > unlink("$child_path/$file") ; > > > } > closedir $dh; > } > > a little correction in the above code: #!/usr/bin/perl
my $child_path = '/home/user71/RangerDatasource/Customization/TelekomMalaysia/Scripts/Tests/cprogs/files/child' ; my $parent_path = '/home/user71/RangerDatasource/Customization/TelekomMalaysia/Scripts/Tests/cprogs/files' ; my $write_path = '/home/user71/RangerDatasource/Customization/TelekomMalaysia/Scripts/Tests/cprogs/files/output' ; my $line; my %hash; my @file; my $key ; my $value ; my %times ; while () { opendir my $dh, $child_path or die $!; while (my $file = readdir $dh) { my $fname = "$child_path/$file"; next unless -f $fname; unless (exists $times{$file}){ opendir my $dh1,$parent_path or die $!; while (my $file = readdir $dh1) { while ($line=readline($file)) { my @cdr=split (/,/, $line) ; $hash{$cdr[2],$cdr[3],$cdr[6],$cdr[7]}=$line; #Add some more cdr key fields if u want. } close $file ; } closedir $dh1 ; open (my $OUT_FILE,">","$write_path/$file.out") or die $!; while (($key, $value) = each %hash) { print $OUT_FILE $value; } close $OUT_FILE; } unlink("$parent_path/$file") ; unlink("$child_path/$file") ; } closedir $dh; }