Rexx, разобрать файл на одну строку

Я пытаюсь найти способ разобрать файл в Rexx. Каждая строка состоит из двух слов и IP-адреса.
Пример
Имя местоположения 10.0.0.1

Я просмотрел много документации и могу заставить ее распечатать все строки в файле, но я не могу понять, как искать весь файл и печатать определенную строку с помощью оператора сопоставления.


person GenericUser    schedule 12.02.2015    source источник
comment
Какую версию Rexx вы используете ZOs, Regina и т. д. Какой матч вы пытаетесь сделать ??.   -  person Bruce Martin    schedule 12.02.2015
comment
Я не совсем уверен, в какой версии это, Rexx Scripting через программу под названием ZOC, emtec.com /zoc/documents.html. В их справке по документации говорится, что Regina Rexx Version 3.4 не уверен, поможет ли это. В основном я хочу запустить совпадение в первом столбце и, если возможно, вернуть все 3 значения в строке соответствия в качестве переменных.   -  person GenericUser    schedule 13.02.2015


Ответы (3)


Для Regina Rexx эта программа должна быть близка к тому, что вы хотите:

   Call A000_init

   Call R000_ReadFile
   do while MoreData
       parse var line pt1 pt2
       if (pt1 == whatever) then do
           /* Do some thing */              
       end
       Call R000_ReadFile
   end


A000_init:
        Yes      = 1
        No       = 0
        MoreData = yes
        filename = .....
return



R000_ReadFile:

    if lines(filename,'N') then do
       Line= LineIn(filename)
    end; else do
       line = ''
       MoreData = no
    end
Return
person Bruce Martin    schedule 13.02.2015

Это довольно простая задача для программы Rexx.

ExpectedLocation = 'Living Room'          /* What location are we searching for? */
Signal on NotReady                        /* Jump to "NotReady:" at end-of-file. */
Do Forever                                /* ... or at least until EOF or Exit! */
   Parse LineIn Word1 Word2 IPAddress .   /* Pull apart the three tokens on the line */
   Location = Word1 Word2                 /* Put the two words of the location back together. */
   If Location = ExpectedLocation then Do /* Did we find it? */
      Say "Found it :-)"                  /* Yay! */
      Exit                                /* We're done, stop the program. */
   End
End
NotReady:                                 /* We come here at end-of-file. */
Say "Didn't find it :-("                  /* Darn! */

Регина с открытым исходным кодом, проект находится на SourceForge по адресу http://regina-rexx.sourceforge.net, а документацию для используемой версии можно загрузить с http://sourceforge.net/projects/regina-rexx/files/regina-documentation/3.4/

person Ross Patterson    schedule 13.02.2015
comment
Похоже, что мне нужно, но как определить, на какой файл смотреть? - person GenericUser; 14.02.2015
comment
Как написано, это будет считываться из стандартного потока ввода (как и любая другая программа консольного режима). Но вы можете заменить Parse LineIn ...whatever... на InputLine = LineIn("whatever_file.txt") и Parse var InputLine with ...whatever..., и вместо этого он будет читать what_file.txt. - person Ross Patterson; 14.02.2015

Входной файл: XXXXXX.XXXX.XXXX

***************************** Top of Data
Location1 Name1 11.11.11.11
Location2 Name2 22.22.22.22
Location3 Name3 33.33.33.33
**************************** Bottom of Data

Код:

/* REXX                                                                        */
/* Author : Ebin Paulose                                                       */
/*=============================================================================*/
YourWord = Location2  /*Word which we need to find, here i m giving "Location2"*/
Your_PS = 'XXXXXX.XXXX.XXXX'               /*File name where we need to search */
"ALLOC DA('"Your_PS"') F(FILEDD) SHR REUSE" /* Allocate the file               */
DO FOREVER                                                              
"EXECIO 1 DISKR FILEDD"                                             
    IF RC>0 THEN LEAVE                                                  
    PULL Record                             /* pull one record from file      */
    PARSE VAR Record Location  " " Name " " IPAddress  
                   /* parse record into  3 parts Location, Name and IPAddress */
    IF Location   = YourWord  THEN do      /* check for matching              */
       SAY 'Found : ' Location                                          
       Found = 'Y'                                                      
    END                                                                 
END                                                                     
IF Found ¬= 'Y' THEN DO                                                 
   SAY 'Sorry Search item Not found'                                    
END                                
"EXECIO 0 DISKR FILEDD (FINIS"     
"FREE F(FILEDD)"                   

Выход 1 (предмет найден) : Найдено : LOCATION2


Выход 2 (элемент не найден) : Извините, элемент поиска не найден


person E P    schedule 11.03.2015