Domanda

Ho una variabile definita come:

D content                     1280A   CONST 

Ho bisogno di trovare le ", &, ', <, personaggi > e sostituirli con:

&quot;, &amp;, &apos;, &lt; e &gt; rispettivamente.

Ho visto alcune funzioni XML nel linguaggio, ma questi non sembrano essere quello che mi serve. Ma potrei sbagliarmi ecco sto chiedendo.

Utilizzando RPGLE, di forma irregolare.

Soluzione : forse non molto RPG-ish ma ha funzionato

P encode          B             
D                 PI          1280A        
D content                     1280A   CONST    
D outStr          S           1280A                       
D strDsp          S             50A 
 /free 
   outStr = %trim(content);   
   outStr = replaceAll('&' : '&amp;' : outStr);  
   outStr = replaceAll('"' : '&quot;' : outStr);  
   outStr = replaceAll('''' : '&apos;' : outStr);     
   outStr = replaceAll('>' : '&gt;' : outStr);    
   outStr = replaceAll('<' : '&lt;' : outStr);   
   return outStr;                               
 /end-free                     
P                 E        


P*** Procedure: replaceAll  ************************************  
P*** IN: character to replace, replacement text, source       
P*** OUT: transformed string             
P replaceAll      B                          
D                 PI          1280A          
D character                      1A   CONST           
D rText                         10A   CONST    
D content                     1280A   CONST         
D outStr          S           1280A   
D dspStr          S             50A                      
D rSize           S              3P 0                                       //replacement text size
D index           S              3P 0                                       //cur str index  
D cntSize         S              3P 0                                       //content size
 /free                                                   
   rSize = %len(%trim(rText));                               
   cntSize = %len(%trim(content));                          
   outStr = content;                                            
   for i = 1 to cntSize; //scan starts at character 1 not 0
      index = %scan(character : outStr : i);
      if index = 0;            
    leave;                        
      endif;                                   
      outStr = %replace(%trim(rText) : outStr : index : 1);    
      i = index + 1;                    
   endfor;          
   return outStr; 
 /end-free 
P                 E         
È stato utile?

Soluzione

Forse questo è ingenuo di me, ma sarebbe sufficiente utilizzare solo il built-in funzione di sostituire%? Voglio dire, che avrebbe dovuto usarlo più volte, per le diverse cose che si sta sostituendo. Ma ci sono casi speciali che tipo di sconfitta la sostituzione senza cervello? (Sto pensando a quanto spesso le persone cercano di CSV appena parse da stupidamente rottura su virgole, per esempio. Questo non va bene per alcune serie di dati.)

Altri suggerimenti

C'è una funzione scanrpl% che andrà a sostituire tutte le occorrenze di una stringa con un'altra stringa. Sembra che il biglietto caldo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top