- 論壇徽章:
- 0
|
franliu 發(fā)表于 2014-05-28 10:36 ![]()
看來胖有型 C++ 很熟。 其實RPGLE 也可以做同樣的事情。
函數(shù) %ADDR() 可以返回變量 所在的內(nèi)存地址, ...
F先生您好,我仔細看了一下,您這里說的是在RPGLE里取變量地址位,以及根據(jù)地址位獲取具體的值,也就是類似于C里面的& 和 * 的用法。
我之前說的,是在內(nèi)存中緩存一份變量名和變量地址的對應(yīng)關(guān)系,這個是不一樣的。
以樓主的要求為例,樓主的需求我們不妨這樣分解一下:
1. 有一張配置表PF, 其中有個字段FLD1, 然后假設(shè)第一條記錄中, FLD1的值為 "VAR1"
2. 樓主的程序中,其實是有VAR1這樣一個字段的,它可能是某個獨立的變量,也可能是某個PF的字段,還可能是某個DS中的一個成員變量,總之有這么一個變量。
假設(shè)VAR1的初始值為"HELLO WORLD"
3. 樓主希望的是,他有一個應(yīng)用程序,讀取PF表,取出第一條記錄中FLD1的值"VAR1";
然后他想根據(jù)這個字符串"VAR1",找到對應(yīng)的"HELLO WORLD", 或者是把這個"HELLO WORLD"修改成為"HELLO AS400"
您舉的偽代碼的例子中,YYYY對應(yīng)的是FLD1的地址位,所以最終取出的YYYY的值一定是"VAR1", 不可能是"HELLO WORLD“
所以針對樓主的這個需求,我們需要有一個初始化的動作。
比如假設(shè)我們已經(jīng)用%Addr取出VAR1這個變量的地址是0XF8305891(隨便編的),那么就需要建立好字符串"VAR1”和這個0XF8305891的對應(yīng)關(guān)系。
以后用的時候就可以根據(jù)字符串找到對應(yīng)的地址位,即而找到相應(yīng)的值了。
MAP的好處是可以動態(tài)擴展,并且使用堆排序,查找效率恒定。
當然考慮到這里是400板塊,過于炫耀C++的知識也有踩場子嫌疑,所以我后來也補充了,用純凈的RPGLE也可以實現(xiàn),只是沒那么優(yōu)雅罷了。
比如我們可以建兩個數(shù)組,保持邏輯上的一致性,也就是說這個一致性只存在于程序員的大腦中,沒有代碼級別的限制。
一個數(shù)組DIMA是存放字符串,一個數(shù)組DIMB存放事先取出的變量的地址位。
要用的時候通過LOOKUP操作符,查找出"VAR1“這個字符串在數(shù)組DIMA中的下標位置,然后直接用這個下標在數(shù)組DIMB中取地址就可以了。
之所以說用數(shù)組沒有map優(yōu)雅,一個是數(shù)組需要約定最大元素,再一個LOOKUP操作好象是全數(shù)組掃描,沒有map的查詢快。 不知道I5以后的版本有沒有對數(shù)組查詢這部分做優(yōu)化。
當然,我也深深的懷疑,我們討論得這么熱火朝天,樓主到底看到?jīng)],看明白沒。。。
|
|