2012-09-19 54 views
2

我知道這樣一個事實,即可以使用循環將每個元素移動到新目標,但是有沒有更簡單更優雅的解決方案?顯然MOVEA在這裏沒有太多幫助,因爲它不適用於同一陣列。如何在RPG中移動數組元素?

回答

2

使用SUBARR函數向下移位。

/FREE 
    %subarr(array:1) = %subarr(array:2); // Shift elements 
    array(%elem(array)) = *blanks;  // Reset the remaining element 
/END-FREE 

C     EVAL  %SUBARR(array:1) = %SUBARR(array:2) 
C     EVAL  array(%ELEM(array)) = *BLANKS 

上移需要使用一個臨時數組或存儲由於重疊的。

+0

這是一個完全免費的風格實現? –

+0

@God_of_Thunder它可以是自由形式或固定的。 – jamesallman

+0

俏皮。我相信這個功能是在V5R3中引入的,所以那些在較早的AS/400上的用戶將無法使用它。 (我公司最近剛剛從V5R2移到了V5R4。) –

0

memmove() — Copy Bytes C庫函數可以安全地從左到右或從右到左複製重疊的內存區域。對我來說,一個用途是掃描一個字符串以獲得嵌入式撇號。如果我找到一個,我從該位置開始取出字符串,並將字節向右移動(即「複製」)一個位置。這導致了一個加倍的嵌入式撇號,所有後續字節都移位了一個位置。

該函數還返回新位置的指針,我使用該(加1)作爲起點來掃描下一個嵌入式撇號的字符串的其餘部分。我循環,直到掃描沒有返回命中。一個字符串本質上只是一個字節'數組',所以它和實際數組一樣好。