2017-01-26 85 views
0

經過多年的搜索,我相當確定這是不可能的,但我仍然會問。AS400 RPGLE /操作中的空閒動態變量

問題是,如果您不知道字段名稱,是否可以在操作中使用動態變量。例如,我有一個包含幾百個字段的數據結構。操作員選擇其中一個字段,程序需要從傳遞的數據結構中知道數據駐留在字段中。所以我們會說有100個字段,字段50是操作員選擇操作的字段。該程序將在FLDNAM變量中的字段名稱(即字段50)中傳遞。該程序會讀取像這樣的正常方式:

/free 
    if field50 = 'XXX' 
    // do something 
    endif; 
/end-free 

問題是,我將不得不爲每個操作代碼這100次。例如:

/free 
    if fldnam = 'field1'; 
    // do something 
    elseif fldnam = 'field2'; 
    // do something 
    .. 
    elseif fldnam = 'field50'; 
    // do something 
    endif; 

是否有任何可能的方式對未知的字段執行操作? (即IF FLDNAM(指針數據)='XXX'然後做點什麼)

+2

RPG是一種強類型語言。字段必須預先定義,並且字段的名稱永遠不會被程序以您可以檢索或動態指定的方式獲知。你可以使用數組,還是所有的字段都不一樣? – jmarkmurphy

+0

嗨。感謝您的迴應。我想如果需要使用數組,只是爲了更快的處理。我將加載一個數據區域以及一個字段名稱數組,然後是一個位置數組。代碼可能會變得非常複雜,但是如果您不能使用動態變量,那是我的備份計劃。所有的字段都是不同的長度,有些是十進制的,等等。我知道可以通過數組來工作,但是我想知道是否有其他選項。 – user1420914

+0

絕對可以這樣做。想想一個查詢。它在開始之前是否知道你想要的領域?它可以幫助你選擇字段嗎? – danny117

回答

3

如果數據結構是外部描述的,你知道是哪個文件從何而來,你可以使用QUSLFLD API,找出偏差,長度和類型的字段中的數據結構,然後使用substring獲取數據,然後使用其他計算來獲取值,具體取決於數據類型。

+0

我加了這個答案,儘管REXX可能會這樣做。然而,我最終採用了與此類似的解決方案。我已經有一個列出數據位置,長度等的文件。基本上只是該文件的DSPFFD。我將這些值加載到數組中,然後根據發送給程序的字段來替換數據。事實證明,這比我想象的要容易得多,代碼比我想象的要少得多。好東西,因爲我太老,無法學習另一種編程語言。 :) – user1420914

1

簡單的答案,沒有。

RPG的根本不是爲此設計的。很少有語言。

你可能想看看腳本語言。比如Perl,可以即時評估。安裝在IBM i上的REXX具有INTERPRET關鍵字。

REXX Reference manual