#!/opt/gnu/bin/perl
#
# fixblock.pl -- block a data file to a fixed record length
#
# This program is for fixing a data file that has no lineends, but
# is supposed to be LRECL. Such data files often come from tape as
# "stream files". The program reads records of LRECL-length and writes
# them to a new file, with lineends. Other programs that perform a
# similar task are dd (difficult to use) and fold (doesn't put a line
# end on the last line).
#
# Note: most of this program is pretty-printing error and
# usage messages. The actual working code is one line of Perl
# (while/sysread). Tested with 'use strict' and -w.
#
# --Kent Nassen, 11/30/95, 3/12/97, 8/12/98, and 9/22/98
# Syntax: fixblock.pl -l# infile outfile
# where # is the lrecl number of characters to block the file
# All parameters on the command line are required.
use Getopt::Std;
use vars qw($version $ProgName $infile $outfile $recnum $record $opt_l);
# $version="(v1.3, 8/12/98)";
$version="(v1.4, 9/22/98)";
($ProgName = $0) =~ s%.*/%%; # Unix
# ($ProgName = lc $0) =~ s%.*\\%%; # DOS
getopts('l:');
if (!$opt_l) {
&UsageInfo;
print STDERR " *** No -l (record length) parameter given\n\n";
exit 1;
}
if ($#ARGV > 1) {
&UsageInfo;
print STDERR " *** Input and output are the only filenames allowed\n\n";
exit 1;
}
if ($#ARGV==1) { $infile = $ARGV[0]; $outfile = $ARGV[1]; }
else {
&UsageInfo;
print STDERR " *** Input and output filenames are both required\n\n";
exit 1;
}
# Open the files, read records, and write blocked output
open INDAT, "<$infile" or
die "\n *** $ProgName: Can't open input file '$infile': $!\n\n";
open OUTDAT, ">$outfile" or
die "\n *** $ProgName: Can't open output file '$outfile': $!\n\n";
while (sysread(INDAT, $record, $opt_l)) { $recnum++; print OUTDAT $record,"\n"; }
close INDAT;
close OUTDAT;
print STDERR "\n$ProgName: Done!\n",$recnum," records processed from '$infile'\n\n",
"Output is in '$outfile'\n\n";
sub UsageInfo {
print STDERR "\n$ProgName: block a data file that has no lineends ",
"(inserts a lineend after\n a given number of characters) ",
"--Kent Nassen ", $version,"\n\n Usage: $ProgName -l# infile outfile\n",
" where # is the record length desired\n\n",
" For example:\n",
" $ProgName -l80 mydata mydata.out\n\n";
}
Last Modified: Tue Jul 15 18:13:47 EDT 2025