J'ai une chaîne de paramètres REXX dans ce format:
parse upper var arg mode . ,
1, 'SUMMARY('summary')' .,
1, 'DESCRIPTION('description')' .
et j'analyse le mode, le résumé et la description comme suit:
arg = 'update summary(A summary of something) description(The description)'
3 Réponses :
J'ai créé cette fonction 'toUpper', qui est un peu plus simple que prévu. Il prend une chaîne et une liste de mots en entrée et renvoie la chaîne avec l'un des mots convertis en majuscules s'il est trouvé:
Parms are : UPdatE summary(The summary) Description(The description) Parms are now : UPDATE SUMMARY(The summary) DESCRIPTION(The description)
Sortie:
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
Cela devrait fonctionner, je pensais faire une routine à usage général mais en me concentrant sur le '(' ')' et en sauvegardant comme une variable racine. J'écrirai le code de base
C'est une tâche assez courante lorsque l'on essaie de simuler la syntaxe TSO-ish / IDCAMS-ish dans Rexx. Je fais généralement quelque chose comme ça. C'est un idiome si court que je n'ai jamais pris la peine d'en faire un sous-programme, utilisez-le simplement en ligne.
summary = 'Whatever the default value is'
description = 'Whatever the default value is'
parse var arg mode arg
mode = upper(mode)
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
Merci Ross - c'est assez chouette. Je vais jouer avec.
Tel que fourni, le code de Ross ne fonctionnera pas sur un système z / OS. Le REXX sous z / OS est un peu ancien. :-( Les codes suivants fonctionneront.
summary = 'Whatever the default value is'
description = 'Whatever the default value is'
arg = 'UPdatE summary(The summary) Description(The description)'
parse var arg mode arg
upper mode
do while arg <> ''
parse var arg keyword '(' value ')' arg
upper keyword
select
when keyword='SUMMARY' then summary = value
when keyword='DESCRIPTION' then description = value
otherwise Say 'Unknown option:' keyword
end
end
pourquoi ne pas analyser en fonction de '(', ')' c'est-à-dire
analyser var arg keyword '(' value ')' argpuis tester le mot-clé. Parcourez également les mots-clés@BruceMartin Salut Bruce - comment ça s'est passé depuis Hoskyns et Greenford? :-) Cela pourrait fonctionner bien que j'aie en fait pensé à choisir les positions des mots clés et que j'ai trouvé quelque chose d'assez simple que je pourrais créer un sous-programme externe - voir ma réponse.