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]