Thanks. I have been away the last couple of days. Question: this is not a
binary file, so is binmode still needed ?

> -----Original Message-----
> From: Jenda Krynicky [mailto:Jenda@;Krynicky.cz]
> Sent: Wednesday, October 23, 2002 5:00 PM
> To: [EMAIL PROTECTED]
> Subject: Re: Splitting A large data file
> 
> 
> From: "Kipp, James" <[EMAIL PROTECTED]>
> > I am working on a Windows NT box and I don't have the luxury of any
> > file splitting utilities. We have a data file with fixed length
> > records. I was wondering the most efficient way of 
> splitting the file
> > into 5 smaller files. Thought ( Hoping :-) ) some one out there may
> > have done something like this.
> 
> # untested code !!!
> # please add error checking !!!
> use strict;
> my $record_length = ...;
> my $num_parts = 5;
> 
> my $chunk = 1024 * $record_length; 
>       # or something else. I just want the $chunk to be a nice number
>       # yet be sure the chunk contains complete records
>       # I assume the $chunk will be much smaller than the size of the
>       # whole file.
> 
> my $file_size = -s $filename;
> my $chunks_in_part = int($file_size / ($chunk * 5));
> 
> open IN, $filename;
> binmode(IN);
> 
> my $buff;
> foreach my $part (1 .. $num_parts) {
>       open OUT, "> $filename.$part";
>       binmode(OUT);
>       for(my $i = 1; $i <= $chunks_in_part ; $i++) {
>               sysread IN, $buff, $chunk;
>               syswrite OUT, $chunk;
>       }
>       if ($part == $num_parts) { # write the rest to the last file
>               while (sysread IN, $buff, $chunk) {
>                       syswrite OUT, $chunk;
>               }
>       }
>       close OUT;
> }
> 
> 
> I think you get the idea. Simply ... read the file in chunks (N*4KB 
> at least) that contain whole records and use sysread() and 
> syswrite(). 
> 
> Jenda
> ===== [EMAIL PROTECTED] === http://Jenda.Krynicky.cz =====
> When it comes to wine, women and song, wizards are allowed 
> to get drunk and croon as much as they like.
>       -- Terry Pratchett in Sourcery
> 
> 
> -- 
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
> 


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to