Sujet : Re: Text processing on VMS
De : arne (at) *nospam* vajhoej.dk (Arne Vajhøj)
Groupes : comp.os.vmsDate : 13. Oct 2024, 20:26:03
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <veh6s8$pplq$1@dont-email.me>
References : 1 2 3
User-Agent : Mozilla Thunderbird
On 10/13/2024 2:57 PM, Dave Froble wrote:
On 10/13/2024 2:39 PM, Arne Vajhøj wrote:
On 10/13/2024 11:04 AM, David Meyer wrote:
I've got a text file with data that I want to select lines matching
certain character strings, then extract string values from the selected
lines by character position. On Unix, I would use awk or Perl. Does VMS
have a similar tool, should I use my favorite programming language and
call the STR$ RTL, can I write a TPU script to do this, or should I
transfer the file to a Unix box and user awk or Perl? ;)
>
Both Perl and gawk are available for VMS.
>
VSI distribute Perl - Alpha and Itanium here
https://vmssoftware.com/products/perl/ - x86-64 I believe comes with VMS
>
Gawk you can get from the net -
https://vms.process.com/scripts/fileserv/fileserv.com?GAWK
>
You can also use some other script language: Python, Groovy etc..
>
(I like Groovy)
>
A traditional VMS language (Cobol,Fortran,Basic,Pascal) and builtin
string functionality or STR$ calls will likely be much more code.
Using SEARCH and then a simple Basic program is not that much work.
For example:
SEARCH File1.txt "some text" /output=File2.txt
1 On Error Goto 90
10 Open "file2" For Input as File 1%
Open "File2" For Output as File 2%
20 Linput #1%, Z$
Print #2%, Mid(Z$,?,?)
Goto 20
90 GoTo 99 If ERR=11
On Error GoTo 0
99 End
Simple
No having to know whatever is your favorite utility
I seriously doubt there would be much fewer characters
No, I didn't try it ...
I have confidence in your VMS Basic skills.
:-)
A compound solution of SEARCH and a program is an option.
But in a relevant script language then it should be a one statement
problem (although in most cases splitting that one statement over
multiple lines is a good thing for readability).
import java.nio.file.*
Files.lines(Paths.get("login.com"))
.filter(line -> line.contains("java"))
.map(line -> line[2..12])
.forEach(System.out::println)
output pos 2..12 (pos is 0 based!) from all lines of login.com
that contains "java".
Arne