Hi,

Can someone spot and explain what I am doing wrong.

I have a script that should read the contents of a CD (on Win32). I 
want a summary at the top of the page of what I've found. I use find 
to count the files and dirs and I want the total files ($in) to be a 
the top before I list the files. Once I have printed the header stuff 
("Content of ..."), I store the position of the filehandle so I can 
come back to that position later but I am always truncating existing 
text so my output reads like this:

CD Has 4 folders:
a, e, g, n, 

Total number of files: 38486
38486jpg
1224.jpg
1225.jpg
...

When i desire this:

CD Has 4 folders:
a, e, g, n, 

Total number of files 38486
--------------------------
1221.jpg
1222.jpg
...

The text starts in the expected place but although I have created 12 
newlines for the summary text (that should only use 9 lines) the text 
crashes into listing sucking up any spare newlines as it goes.
Am I making sense?? Any ideas?
Dp.

=============

use strict;
use warnings;
use Win32API::File 0.08 qw(GetVolumeInformation );
use File::Find;

$| = 1;
my $in = 0;

my $sRootPath = 'e:/';

my 
($osVolName,$lVolName,$ouSerialNum,$ouMaxNameLen,$osFsType,$ouFsFlags,
$lFsType);
GetVolumeInformation( $sRootPath, $osVolName, $lVolName, 
$ouSerialNum, $ouMaxNameLen, $ouFsFlags, $osFsType, $lFsType );

my $file = $osVolName.'.txt';
open(LOG,">$file") or die "Can't write $file: $!\n";
print LOG "Contents of Disk with Volume Name $osVolName\n\n";
my $pos = tell LOG;

print LOG "\n\n\n\n\n\n\n\n\n\n\n\n"; # Add space for summary.
print LOG "-------------------------\n";

my @dirs;
my %uniq;
find(\&files,$sRootPath);

# Summary text.
seek(LOG, $pos, 0);
print LOG "CD Has ",($#dirs + 1)," folders: ";
for (@dirs) {
        print LOG "$_, ";
}
print LOG "\n\nTotal number of files: $in\n";


sub files {
        my $section;
        ($section) = ($File::Find::dir =~ /$sRootPath(\w{1})/);

# unique folder only    
        if (! exists($uniq{$section}) && $section =~ /\w/) { 
                push(@dirs,$section);
                $uniq{$section} = 0;
        }
# Count the files and print em'
        if ($_ =~ /jpg/i) {
                ++$in;
                print LOG "$section\t$_\n";
        }
}


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/


Reply via email to