2

私は次のように定義された変数を持っています:

D content                     1280A   CONST 

、、、、、の文字を見つけて"、次のよう&に置き換える必要があります。'<>

&quot;、、、、、および; _ &amp;_ それぞれ。&apos;&lt;&gt

この言語でいくつかのXML関数を見てきましたが、これらは私が必要としているものではないようです。しかし、私は間違っている可能性があるので、ここで私は尋ねています。

RPGLE、フリーフォームを使用します。

解決策:おそらくRPGっぽくないかもしれませんが、うまくいきました

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         
4

2 に答える 2

4

たぶんこれは私にとっては単純なことですが、組み込みの%replace関数を使用するだけで十分でしょうか?つまり、交換するさまざまなものに対して、繰り返し使用する必要があります。しかし、無意識の交換を打ち負かすような特別な場合はありますか?(たとえば、コンマを無意識に壊してCSVを解析しようとする頻度を考えています。これは、一部のデータセットではうまくいきません。)

于 2011-01-24T02:49:46.660 に答える
3

文字列のすべての出現箇所を別の文字列に置き換える%scanrpl関数があります。ホットチケットのようです。

于 2015-03-06T17:14:57.530 に答える