$/=\108;
($/) = (<> =~ /^.{105}(.?\r?\n?)/);
seek ARGV, 0, 0;
####
# Look ahead into the file for the ISA segment and the few characters which
# follow it, so that we can determine the segment terminator character(s).
$/ = \108;
my $ISA_and_trailing_chars = <>;
# examine the text after the segment for the segment termination character(s)
$ISA_and_trailing_chars =~ /
^.{105} # The actual ISA segment, itself
(
.? # The proper segment terminator character
\r? # If the segment terminator is followed by a newline and/or
\n? # carriage return, include that as part of the segment
# terminator. this isn't really legal to do, but some
# folks do it, regardless, and we want to be able to handle
# that sort of garbage as though it weren't garbage.
)
/x;
my $segment_terminator = $1;
# set the input record separator to the segment termination character(s), so
# that subsequent reads from the file will read one segment at a time.
$/ = $segment_terminator;
# since we peeked ahead into the file, to determine *how* to read it, now
# seek back to the beginning of it, so that we can read it (all) correctly
seek ARGV, 0, 0;
##
##
#!/bin/sh
# since "perl -p ... -n ..." will be treated by perl as just
# "perl -p ... ..." (not allowing the -n to override the -p)
# we have to scan through any switches on the command line,
# so that commands like "x12cat -ne 'print if /^PLB/' ..."
# will work as expected... but still allow an implicit "-p"
# if no "-n" is specified. Granted this isn't perfect...
# But this isn't so bad, because an explicit "-p" can override
# this.
looptype=""
for i do
case "$i" in
-m*) ;; # -m and -M start command-line "use" directives,
-M*) ;; # "n"s in them should be ignored
-*n*) looptype=n;;
-h) echo 'x12cat: "magic" x12 spooler wrapper around command-line perl.
-splits files by segment terminator
-auto sets $f and $c to (regex-escaped) field and component separators
-auto sets the autosplit to the field separator (for the -a autosplit)
-allows -pe or -ne operations on file (or none at all to just cat the file)'; exit;;
-*) ;;
*) break;;
esac
done
if [ "x$looptype" = "x" ]; then
looptype=p
fi
perl -l -$looptype -e 'BEGIN{$SIG{PIPE}="exit"; $|=1; $/=\108; ($f,$c,$/)=(<> =~ /^ISA(.).{100}(.)(.?\r?\n?)/); ($f,$c)=("\Q$f","\Q$c"); seek ARGV,0,0; $.=0}' -F'/$f/' "$@"
##
##
$ x12cat -ne 'print if /^GS/' some_file.x12
##
##
$ x12cat -ane '$paid += $F[4] if $F[0] eq "CLP"; END{print $paid}' some_835_file.x12
##
##
------------
:Wq
Not an editor command: Wq