In Pursuit of
PRINT tricks
By Steve
Hammond
Inside VESOFT
covers tips and techniques you can use with VESOFTs products,
especially MPEX.
Last month, I
told you how to do a search for text that doesnt use the PRINT
command. As I was preparing that column, I realized theres a
lot to the PRINT command that weve never discussed.
<ding> Sounds like a good idea for a column!
Check out the
MPEX manual and youll find almost 20 different parameters you
can use in conjunction with PRINT. Some of them you already know
SEARCH is a good example, but thats just the tip of the
old ice cube.
If you need
to print files and you dont want to change the access/modify
dates, just %PRINT fileset;KEEPAMDATES
If this is an
issue and you always forget the KEEPAMDATES, then you can set the jcw
MPEXPRINTKEEPAMDATES=1 either prior to the command or better yet, in
the MPEXMGR.PUB.VESOFT file (remember that?).
Lets
say you want the output to go to a specific file rather than the
screen; try %PRINT fileset;OUT=filename.
But enough
with the simple stuff lets get to the fun stuff! Some
newer features of PRINT address some interesting issues. Message
files (raise your hand if you have ever used a message file) have
this habit of the record erasing after you read it. Since PRINT uses
the standard intrinsics, using it on a message file would be somewhat
counter-productive. So if you are PRINTing a fileset that includes or
may include a message file, try %PRINT fileset;COPYACCESS to preserve
the message files. (COPYACCESS can be abbreviated to just
COPY.)
Ever get
screenfuls of output from a PRINT command and spent the next hour
trying to filter through all those lines, trying to find specific
file names? Again, MPEX has some foresight and comes to your rescue
with the HIGHLIGHT parameter. Add that at the end of the PRINT
command and the Printing: filename will be displayed in
inverse video. A bunch easier to find on a multi-screen
dump.
What if you
only want to look at certain lines in a file? You can declare the
starting record number (;START=nn), the ending record (;END=nn) or
both in a single command. %PRINT fileset;START=27;END=35 means that
only records 27 through 35 (inclusive) will be printed. If you only
want to print the last 15 lines of your fileset, then %PRINT
fileset;START=-15;NUM.
Threw a
little extra into that one! The NUM tacked on the end tells MPEX to
display either line numbers or record numbers if they exist
very helpful when dealing with source files. The default is ;UNN
telling MPEX not to put line or record numbers in the output.
Sometimes the line numbering can be a little tricky. Often times the
last eight characters of a line are considered the line numbering. So
if you have a file with numbers in those positions throughout the
file, you probably dont want MPEX considering those as
line/record numbers. What to do? What to do?
Use %PRINT
filename; NONUMRECOGNIZE.
If you only
want certain parts of a line, youve got that ability. Actually,
this is just part of the string expression manipulation you can do
with VESoft products. Never heard of it? Have you read the Appendix
to the VESoft manual? Theres almost 40 pages of different
expressions you can utilize when you work with MPEX or SECURITY. But
where were we? Oh yeah, string expressions:
%PRINT filename;
FORMAT=...
The trick is
that the FORMAT option does not output the exact record, but instead
outputs some function of the record.
FORMAT=R[0:15]
not the square brackets will only print the first 15
characters of any given line. You can work with TOKEN and REMTOKEN
if you understand those, thats fine, I dont have
enough space to thoroughly go into it. Check the
appendix.
And then
there are the helpers for the SEARCH. You can do some
complex searches, but how good are they if you cant see them in
the proper context? So you have the CONTEXT option:
%PRINT
filename;SEARCH=.....;CONTEXT=-5,+5
This says for
every line with the string you are seeking, display the five lines
before (-5) and the five lines after (+5). Thats the simple
option:
%PRINT
filename;SEARCH=IF or AND;
CONTEXT=FUNCTION, (R[0:5]=ENDIF)
Here
were looking for a line that contains IF or
AND and then we find the line prior to it that contains
the string FUNCTION and start printing with that line and
print until we find a line that has ENDIF in the first
five positions.
Ill be
the first to admit that I cant do justice to the power of the
PRINT and SEARCH commands here. So RTMALEM read the manual and
learn even more.
Steve
Hammond, who works for a professional association in Washington, DC,
wishes all of his readers a happy holiday season.
Copyright The
3000 NewsWire. All rights reserved.
|