General HydroStatics
Ship Stability Software
Command of the Week
(New or interesting aspects of GHS that you may not know about)

READing the future
(Requires GHS version 17.50 or later)

Back at the dawn of GHS time when READ was designed, there was this primitive idea that Geometry files and Run files were the only types of input files a reasonable naval architect would want to deal with.

A few years later a forward-looking individual came along who wanted GHS to read data files for other purposes.

"Fine," we said. "We'll give the READ command an alternate mode whereby it will address line-oriented text files." And everyone was happy ... for a while.

Now someone wants GHS to read from two text files simultaneously. Where will it end? It's hard to read the future.

Unless the files are very large, you can multiplex the READ (DATA) command by making a macro that reads one line then closes the file, keeping track of the line number. No doubt you see where this is going: the next Read for that file skips past the lines that have already been read.

The macro would look something like this:
macro ReadIn /Function `%1: file number
 IF {File%1Pos}=-1 THEN EXIT
 READ (DATA) "{File%1}"
 macro Skip
 .Skip (File%1Pos)
 IF EOF THEN File%1Pos:=-1 ELSE File%1Pos:=File%1Pos+1
Another short macro would be handy for defining and initializing necessary variables:
macro DataIn `%1: file number; %2: file name
 VARIABLE (STR) File%1="%2"
 VARIABLE File%1Pos=0
We tested it by making a pair of text files and a macro to read them both:

.DataIn 1, "Soundings.txt"
.DataIn 2, "Headings.txt"

VARIABLE (STR) Sounding, Heading

macro ReadBoth
 IF {File1Pos}<0 THEN EXIT
 \Sounding={Sounding} Heading={Heading}
 EXIT ReadBoth
What you lose by always doing READ /LINE is the ability to read items from one line into separate variables. But this is easily overcome using the ITEM function to pick the next item from a string.

Note that the same DataIn and ReadIn macros are good for reading as many files as you like simultaneously. Bring on the future!

Questions, comments, or requests?
Contact Creative Systems, Inc.

USA phone: 360-385-6212 Fax: 360-385-6213
Office hours: 7:00 am - 4:00 pm Pacific Time, Monday - Friday

Mailing address:
PO Box 1910
Port Townsend, WA 98368 USA

Click here for an index to this and previous COWs