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 ')' arg
puis 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.