Could someone provide a sample list of commands to open a file on my
pc, read each line
and write each line to an output file?
Also how do you debug a rexx.exe?, When I run on that is in error the
MS window closes
before I see what the error was. Thanks in advance.
Here is an old file I had around (cut and pasted below). Modifies lines in a
file based on a simple pos search on each line.
ASCII/text file.
No waranty on how it will work for you.
This was written for OS/2 but should run unchanged in windows.
For debug you can add the trace command. Most of my rexx has been simple
scripts so Say and Trace have been enough.
From the rexx docs:
TRACE ?R
/* Interactive debugging is switched on if it was off, */
/* and tracing results of expressions begins. */
You can switch off interactive debugging in several ways:
* Entering TRACE O turns off all tracing.
* Entering TRACE with no options restores the defaults--it turns off
interactive debugging but continues tracing with TRACE Normal (which traces
any failing command after execution).
* Entering TRACE ? turns off interactive debugging and continues
tracing with the current option.
* Entering a TRACE instruction with a ? prefix before the option
turns off interactive debugging and continues tracing with the new option.
Now that IBM has opensourced Rexx you can get info here
http://www.oorexx.org/
http://www.oorexx.org/docs.html
Take care,
Bart
cut and paste to a filename of your choice ".cmd" ie "myscript.cmd"
run as follows:
c>rexx myscript.cmd mydatafile.dat
------------- Cut ------------
/* REXX EXEC */
'@Echo off'
parse arg filename
fname = filename'.new' /* create new file name for output, If it exists
we will append to it. */
say 'input file = "'filename'"'
say 'output file = "'fname'"'
modifiedLines = 0
totalLines = 0
input=linein(filename)
Do while lines(filename) > 0
totalLines = totalLines + 1
pos1 = lastpos('Fixme', input)
if pos1 \= 0 then
Do
output = left(input, pos1-1)'Fixed'
modifiedLines = modifiedLines + 1
End
else
Do
output = input
End
call LINEOUT fname, output
input=linein(filename) /* get next line */
End /* file read loop */
say 'Total lines read = 'totalLines
say 'Total lines changed = 'modifiedLines
------------ End Cut -------------------
I recently came across the fact that you could turn rexx tracing on by
setting the RXTRACE environment variable to ON. This can be handy if
you use external subroutines, or ::include libraries. If you find
yourself about to call such an external routine (while tracing your own
code) then you can enter:
Call Value 'RXTRACE','ON','ENVIRONMENT'
... and see what the external routine does.
--
Steve Swift
http://www.swiftys.org.uk/swifty.html
http://www.ringers.org.uk
someproc:
fi_rm1 = 'c:\ghexe\utem1rm1.txt'
fi_out = 'w:\bkpdir\utem1rm1.001'
do while lines(fi_rm1) > 0
ws_inb = linein(fi_rm1)
say 'ws_inb='ws_inb
call lineout fi_out, ws_inb
end
call lineout (fi_rm1) /* close */
call lineout (fi_out) /* close */
return
As for debugging - ask smarter guys than me. That said . .
I do use 'trace' with a parm occasionally but usually when I've done a
nono if prints up on the CMD window and describes the error very
clearly. (Am ooRexx on XP though - shouldn't make a difference).
Many Rexx's have bitten me because i forgot to close the file. Read
the manual about linein and how its coded (I say this because in the
code above there is no explicit 'open' - ain't like cobol:-))
Hope this helps,
Graham
On Fri, 18 Jul 2008 21:35:56 -0700 (PDT), globaloney
<jgo...@excite.com> wrote:
** Posted from http://www.teranews.com **
True true...
But for max I/O performance, methods were added which are FAR superior to LineIn / LineOut.
For example:
file=.stream~new('data.dat')
file~open('READ')
if result\='READY:' then do
return 0
end
/* Check for how many lines the file has */
FILEsize=file~command('QUERY SIZE')
/* Read in the file */
/* This code requires at least ORexx 2.1.1 on Win32 - only tested with >=2.1.2 */
INstr=file~charin(1, FILEsize)
FINDarray=INstr~makearray()
file~close()
Open/Close the file with the scream object. If it is not possible to have the complete data set in memory, the use LineIn/LineOut instead of charin/makearray.
--
Michael Lueck
Lueck Data Systems
http://www.lueckdatasystems.com/
Thanks Steve! I had not known of that trick.
Indeed it does work with ooRexx on Linux.
> Also how do you debug a rexx.exe?, When I run on that is in error the
> MS window closes
> before I see what the error was. Thanks in advance.
The simplest way is to have your code end with something like:
say "***" ; parse pull waste
so the exec waits for a final bit of input before ending.
You could put that in your error handler if normal execution is meant to
produce no output, so only when something goes wrong does the window hand
around.
--
Jeremy C B Nicoll - my opinions are my own.
IMO, for the serious REXX developer, by far the best way to debug an
Object Rexx program is via the IBM Object Rexx Workbench Developer
Edition (2.1+ upgradable).
With a little effort, detailed in my post to rony (29 May 2008
09:11:48) in the following link, it can be adapted to use the latest
ooRexx version. It allows for just about full visual interactive
debugging with watch variables, etc. It's a serious development
environment in absence of ooRexx support for Eclipse.
use arg infile
infile = .stream~new(infile)
outfile = .stream~new('outfile.txt')
do infile~lines
outfile~lineout(infile~linein)
end
infile~close
outfile~close
Phil
----
Thanks Steve! I had not known of that trick.
Thanks All. I am up and running
Did you try mine and Phil's. Which one's better - if Phil's then I'll
use in future (seems cleaner).
Graham
Sorry for taking so long to get back to you
I was originally using Nitro's(Bart's) code since I am not familiar
with the oorexx language yet.
His is similar to yours. It was working pretty well. I am using
software called SPFLITE which simulates SPF edit functions like a
mainframe.
In my last line of code. I access my file thru SPFLite,review the
output and exit.
Now I am trying a little more complicated process where I read in 3
infiles and write to 1 output file . I have run into a snag opening
the output file at the end of the program. I get a file opened error
in SPFLITE, however if I exit and then access the file,it is exactly
as it should be. I tried adapting Phil's code but same deal, I don't
think I am closing my file properly.
Here are my last few lines of code to the output file. Am I closing
the file properly?
/*******************************************/
outfile = .stream~new(FILEOT1)
do j=1 to tw
innie=l.j
outfile~lineout(innie)
END
trace i
outfile~close
/**************Edit file thru
SPFLITE**************************************************/
address cmd "C:\Program Files\SPFLite\SPFLite.exe" FILEOT1
/*****************************************************************/
although the code worked I couldn't get my file opened at the end of
the code.
Oh my gosh, I can't believe someone is still using SPF let alone a clone
of it ... :)
--
Gary Scott
mailto:garylscott@sbcglobal dot net
Fortran Library: http://www.fortranlib.com
Support the Original G95 Project: http://www.g95.org
-OR-
Support the GNU GFortran Project: http://gcc.gnu.org/fortran/index.html
If you want to do the impossible, don't hire an expert because he knows
it can't be done.
-- Henry Ford