1
votes

Analyse d'une chaîne dans z / OS REXX avec une insensibilité partielle à la casse

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)'


2 commentaires

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.


3 Réponses :


1
votes

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 


1 commentaires

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



1
votes

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


1 commentaires

Merci Ross - c'est assez chouette. Je vais jouer avec.



0
votes

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                                                                 


0 commentaires