在z / OS REXX中解析字符串,部分不区分大小写

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (10)

我有一个这种格式的REXX参数字符串:

arg = 'update summary(A summary of something) description(The description)'

我正在解析模式,摘要和描述如下:

parse upper var arg mode . ,
   1, 'SUMMARY('summary')' .,
   1, 'DESCRIPTION('description')' .

我将arg转换为大写,以便SUMMARY和DESCRIPTION关键字实际上不区分大小写(用户可以编写Summary或​​SUmmAry或sUmMaRy等代码)但当然现在我只是将我的实际摘要和描述翻译成大写。

如何使解析对关键字不区分大小写,但保留实际参数的正确大小写?

我已经考虑过提取关键字的字符位置并在PARSE语句中使用它们而不是“1”等,但是如果可能的话,想要一个简单的简洁过程。

提问于
用户回答回答于

当尝试在Rexx中模拟TSO-ish / IDCAMS-ish语法时,这是一项非常常见的任务。我经常这样做。这是一个如此简短的习惯用法,我从不费心去做它的子程序,只需使用内联。

summary = 'Whatever the default value is'
description = 'Whatever the default value is'
do while arg <> ''
    parse var arg keyword '(' value ')' arg
    select upper(keyword)
        when 'SUMMARY' then summary = value
        when 'DESCRIPTION' then description = value
        otherwise Say 'Unknown option:' keyword
    end
end
用户回答回答于

我想出了这个'toUpper'函数,它比预期的要简单一点。它需要一个字符串和一个单词列表作为输入,并返回字符串,如果找到则返回任何转换为​​大写的单词:

parms = 'UPdatE summary(The summary) Description(The description)'     
say 'Parms are :' parms                                                

parms = toUpper(parms, 'CHANGE UPDATE SUMMARY DESCRIPTION')            
say 'Parms are now :' parms                                            

exit                                                                   

/********************************************************************/ 
/* Subroutines                                                      */ 
/********************************************************************/ 
toUpper:                                                               

parse arg string, wordList                                             
stringUpper = string                                                   
upper stringUpper wordlist                                             

do i = 1 to words(wordlist)                                            
   word = word(wordlist,i)                                             
   pos = pos(word, stringUpper)                                        
   if pos > 0 then string = overlay(word, string, pos)                 
end                                                                    

return string 

输出:

Parms are : UPdatE summary(The summary) Description(The description)       
Parms are now : UPDATE SUMMARY(The summary) DESCRIPTION(The description) 

扫码关注云+社区

领取腾讯云代金券