Frage

Ich habe eine Variable definiert als:

D content                     1280A   CONST 

Ich muss das finden ", &, ', <, > Zeichen und ersetzen Sie sie durch:

&quot;, &amp;, &apos;, &lt;, und &gt; beziehungsweise.

Ich habe einige XML -Funktionen in der Sprache gesehen, aber diese scheinen nicht das zu sein, was ich brauche. Aber ich könnte mich irren, also frage ich hier.

Mit Rpgle, Freeform.

Lösung: Vielleicht nicht sehr RPG-ish, aber es hat funktioniert

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         
War es hilfreich?

Lösung

Vielleicht ist das von mir einfach, aber würde es ausreichen, nur die integrierte %Ersatzfunktion zu verwenden? Ich meine, Sie müssten es wiederholt verwenden, um die verschiedenen Dinge zu ersetzen. Aber gibt es besondere Fälle, die einen sinnlosen Ersatz für den sinnlosen Ersatz besiegen? (Ich denke darüber nach, wie oft Menschen versuchen, CSVs nur durch sinnlos gegen Kommas zu brechen. Das läuft für einige Datensätze nicht gut.)

Andere Tipps

Es gibt eine %scanRPL -Funktion, die alle Vorkommen einer Zeichenfolge durch eine andere Zeichenfolge ersetzt. Es sieht aus wie das heiße Ticket.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top