HP OpenVMS Systemsask the wizard |
The Question is: i have a stream_lf file downloaded from tape from a unix box. i can't read it because the length of the record ='s the total lenght of the file. how can i read it? rms has a 65K buffer limit...any way around this? do i need to do physical qio's to 'deb lock' the file? The Answer is :
Without some idea of the file contents, this may simply involve
resetting the file attributes to, say, stream LF, via the DCL
command SET FILE/ATTRIBUTES. This could also involve raw access
to the contents of the file, or potentially a CONVERT/FDL pass.
If the file has the attribute stream_lf and there is no terminator
('lf') in the first 32K bytes, then RMS does not view the file as
being valid.
If this is the case, the workaround is to change the file attributes
to more closely match the actual contents of the file, probably with
a file attribute setting that has no overhead and no meta data. One
suggestion would be to mark the file as fixed length record file with
an EVEN (and it must be even) record size, such as 512 or 8192 bytes:
$SET FILE /ATT=(RFM=FIX,LRL=512,MRS=512)
This will allow any program to read it, one a record at a time. An
alternative is to mark is as UNDEFINED. Here RMS simply returns the
number of bytes requested by the program. (RAB$W_USZ contains the
record buffer size requested by the application, though this value
be be hidden in an RTL layer.)
Using SYS$QIO or SYS$READ is typically not needed, as the operation
approximates a fixed-length record $GET operation.
|