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]