久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

RPG AS400程序員培訓手冊(大全五篇)

時間:2019-05-12 19:20:12下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關的《RPG AS400程序員培訓手冊》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《RPG AS400程序員培訓手冊》。

第一篇:RPG AS400程序員培訓手冊

2.8.4.4 O--R

ON-ERROR(On-Error)

沒用過

OPEN {(E)}(Open File for Processing)打開文件

Factory 1 Operation Factory 2 Result HI LO EQ

OPEN 文件名

OPEN 后面的目標,必須是在當前程序中已聲明的文件名(不是文件的記錄格式名),而且在OPEN 操作之后,在程序結束之前之前,必須有對應的CLOSE 操作。

使用OPEN 操作,文件在聲明時,必須使用USROPN 關鍵字(詳見D 行說明)。

ORxx(Or)邏輯判斷—或

Factory 1 Operation Factory 2 Result HI LO EQ

FLD01 IFGT FLD0

3FLD01 OREQ FLD0

2等價于

IF FLD01>FLD03 OR FLD01=FLD02

與IF、IFxx,AND、ANDxx 類似,RPGLE 的寫法OR,比RPG 的寫法ORxx 要靈活,而且可以用來表達一些復雜的邏輯關系。有鑒于此,所以通常IF 語句中,我會以OR 為主,基本不用ORxx。如果在編程序方面,公司/項目組無硬性要求,那我覺得還是少用ORxx 吧,總覺得這種寫法的邏輯關系看起來不直接,尤其是有很復雜的AND,OR 時。

OTHER(Otherwise Select)分支語句的判斷

與分支語句SELECT 一起使用,表示不符合上述所有條件時的操作,如下:

Factory 1 Operation Factory 2 Result HI LO EQ

SELECT

WHEN 條件判斷1 處理語句1

WHEN 條件判斷

2處理語句2

OTHER

處理語句

3ENDSL

在這個例子中,當滿足條件判斷1 時,運行處理語句1,運行結束后跳至ENDSL 處;

如果不滿足條件判斷1,則程序繼續向下執行,判斷是否滿足條件判斷2。當滿足條件判斷2 時,運行處理語句2,跳至ENDSL;當不滿足

當不滿足條件判斷2 時,程序繼續向下執下,當讀到OTHER 操作碼時,無條件運

行處理語句3(即當程序當前不滿足以上所以條件判斷時,則執行OTHER 之后的語句。

處理語句允許有很多句;

條件判斷可以寫得很復雜,也允許對不同的字段進行判斷;比如說C 語言也有分支語

句switch,但是這個語句只能對一個字段進行分支判斷,ILE 語言與它不同,允許對不同的字段進行判斷

就我目前掌握的測試情況,上述的SELECT—WHEN--OTHER—ENDSL,其實也可以

寫做:

IF 條件判斷

1處理語句1

ELSEIF 條件判斷2

處理語句2

ELSE

處理語句3

ENDIF 即WHEN 與ELSEIF 是類似的,這樣說,應該可以明白了吧。

總之,SELECT—ENDSL 是一個很好用的語法,尤其是在表示很多不同的分支處理時。

OUT {(E)}(Write a Data Area)

沒用過,講數據域的。

PARM(Identify Parameters)定義入口參數

Factory 1 Operation Factory 2 Result HI LO EQR

*ENTRY PLIST

PARM FLD01

關于具體內容講解,詳見前面所說“入口參數”一章。

允許做為入口參數的有:普通變量、結構變量、數組變量

關于PARM、PLIST,還有一種在Factory 1,Factory 2 也填寫變量或指示器的用

法,不過我不知道它具體表示什么意思,也不知道該怎么用。請用過的來補充。PLIST(Identify a Parameter List)同上

POST {(E)}(Post)

沒用過

READ {(N | E)}(Read a Record)讀取記錄

1.基本語法:

Factory 1 Operation Factory 2 Result HI LO EQ

READ 文件記錄格式名 45 46

READ后面跟的,必須是聲明的文件記錄格式名;

LO 指示器表示鎖表指示器,當在指定的時間(CHGPF,WAITRCD 項可看到),需要讀取的記錄仍被鎖,將會打開LO 指示器,即*IN45=’1’;

EQ指示器為是否讀到指示器。當未讀到仸何記錄時,打開EQ 指示器,即*IN46=’1’

2.當文件在程序中,是用只讀的方式聲明時,READ 操作并不會造成鎖表; 如果文件在程序中是用修改的方式聲明,READ 操作成功后,該記錄被鎖;直到執

行解鎖操作(UNLOCK,或UPDATE),或READ 該文件的其它記錄,才會解鎖

如果文件是用修改的方式聲明,但希望READ 操作不鎖表時,那么就用READ(N),即

Factory 1 Operation Factory 2 Result HI LO EQ

READ(N)文件記錄格式名 45 46

這樣讀文件,就不會鎖記錄,但是同時也不能修改記錄。如果需要修改記錄,那么 在修改之前(包括對文件字段賦值之前),還必須再對該記錄進行一次定位操作(比如

CHAIN、READ 語句均可)。也就是說,如果要修改記錄,必須先鎖住當前記錄(很合理吧)

3.當執行READ 操作時,程序是根據游標當前在文件中所指向的位置,順序讀取下

一條記錄。關于游標是如何指向,還不是一個很簡單的問題,所以將會在下一章“數

據庫相關知識”中具體講解。

4.執行READ 操作時,允許聲明的文件沒有鍵值。(即PF 文件)

READC {(E)}(Read Next Changed Record)

沒用過,讀下一次修改過的記錄?

READE {(N | E)}(Read Equal Key)讀取鍵值相等的記錄

語法與READ 操作碼大致一樣,這里不再重復,只說不同的:

假設程序中已聲明邏輯文件PFFHSL3(鍵值為FHS01+FHS02)

Factory 1 Operation Factory 2 Result HI LO EQ

FHSKEY KLIST

KFLD FLD0

1KFLD FLD02

FHSKEY SETLL FMTFHS DOW 1=1

FHSKEY READE FMTFHS 1

5IF *IN15=’1’

LEAVE

ENDIF

ENDDO

這段話的意思,就是定義組合鍵值FHSKEY,然后根據這個FHSKEY 在邏輯文件

PFFHSL3 中去定位,循環讀取PFFHSL3 中,FHS01、FHS03 與FLD01、FLD02 相等的記

錄。當讀取記錄結束,或鍵值不等時,退出循環(*IN15 是EQ 指示器)。如果將READE 操

作碼換成READ 操作碼的話(當然,Factory 1 處也就不能有值),就沒有“鍵值不等時退出

循環”這一層意思,只是讀不到記錄時就退出循環,但有時我們使用邏輯文件,僅僅是需要

它的排序,而不需要讀不到鍵值相等的記錄就退出循環。所以說,使用READ 操作碼,還

是READE 操作碼,需要根據實際的要求來決定。

以上的Factory 1 處填寫值的系統處理,當READE 操作碼在Factory 1 處未填寫值時,系統實際上是將當前的值與讀到的上一條記錄的關鍵字進行比較,而不是與SETLL 時的鍵

值做比較(讀第一條記錄不做比較!),如果鍵值不等時,置EQ 指示器為1。也就是說,如果沒有與FHSKEY 鍵值相同的錄,那么系統并不是直接找開EQ 指示器,而是會一直保

持正常地往下讀,直到找到與讀到的第一條記錄關鍵字不同的記錄,才會打開EQ 指示器,所以要注意。

READP {(N | E)}(Read Prior Record)讀取記錄—游標上移

簡單來說,READ、READE 操作時,游標在數據文件中,是下移的;即讀完第一條記

錄,游標指向第二條記錄;讀完第二條記錄,游標指向第三條記錄,依此類推,直至最后一 條記錄。但READP 則正好相反,游標是上移的,即讀完第三條記錄后,游標指向第二條記

錄;讀完第二條記錄后,游標指向第一條記錄,直至讀完第一條記錄。一般來說,用READ、READE 的概率會比READP、READPE 的概率高得多,不過在某些情況下,使用READP 操作,又的確會很省事,這個一時間想不起例子來,大家可在編

程序時多實踐。

READPE {(N | E)}(Read Prior Equal)

雖然我沒用過,但猜想它應該就是指游標上移,按鍵值去讀取文件。與READP 的關系,就類似于READE 與READ 的關系。

REALLOC {(E)}(Re-allocate Storage)

沒用過

REL {(E)}(Release)

沒用過

RESET {(E)}(Reset)

將數據結構賦值成為初始值。

注意是初始值,不是清空。如定義結構:

D FHSDS DS

D FHS01 10 INZ(’ABCD’)

D FHS02 5 INZ(’EFGH’)

那么,不管對該結構如何賦值,當執行語句: C RESET FHSDS

之后,FHS01 將會變成’ABCD,FHS02 將會變成’EFGH’,即恢復成為初始值。

RETURN {(H | M | R)}(Return to Caller)

RETURN 是程序結束。

在前面,“簡單的程序流程”中,我們講過,“SETON LR” 與RETURN 這兩句話一

起,做為程序的結束。這里,再詳細解釋一下兩者之間的區別,以及關系: 如果不寫RETURN,只寫“SETON LR”,程序執行完最后一句之后,將會再從第一

句開始執行,造成死循環。在簡單的程序流程這個例子中,程序原來只想修改讀到的第一條 記錄,而如果沒有RETURN 的話,將會把所有的記錄都修改掉,直到最后找不到可修改的記錄,然后系統報錯,異常中斷。(這種離奇的現象現在又測試不到了,可能是當時寫錯程 序了?把F 寫成了P?不管它,當是我寫錯了,總之RETURN 是表示程序結束,沒有

RETURN,主程序無可執行的語句時,它也會結束;如果RETURN 出現在主程序的中間,那么RETURN 后面的語句將不會執行)

如果只寫RETURN,不打開指示器*INLR,根據blogliou 所說 “程序不會強制將內存

中的數據寫到磁盤中。400 缺省的是BLOCK 輸出,即數據記錄滿一個BLOCK 塊時才會將

這一組記錄寫到磁盤上。那么如果這時BLOCK 沒滿,數據信息不會立刻寫到磁盤上。之后 有其它作業用到該文件,讀取的數據就不完整。”

但如果文件有唯一鍵字,或記錄日志,必須同步寫時,其實BLOCK 實際被忽略,也就 是此時不會有錯。目前我們用的是MIMIX 備份,客戶實際上將所有的文件都列入日志,這

時不寫也不會出現上述錯誤。但為避免一些潛在的問題,養成良好的編程風格,建議將 SETON LR 與RETURN 一同,做為程序結束的標志。當然,如果某個程序頻繁被調用,且 不涉及文 操作時,可考慮不打開指示器*INLR,僅用RETURN 作為結束,這樣程序不

會被PURGE 出內存,可提高調用效率。

如果沒寫RETURN,也沒有打開指示器*INLR,在編譯時,系統將會報40 級錯,說找

不到程序結束的語句,所以大可放心。ROLBK {(E)}(Roll Back)

1.基本語法

Factory 1 Operation Factory 2 Result

ROLBK

2.該操作碼無其它參數,就是指對事務處理進行回滾操作。3.ILE 程序中,ROLBK 操作可隨時進行,也允許在沒有聲明COMMIT 類型的文件的情況下,仍進行ROLBK 操作(對該進程這前的事務進行確認處理)f

4.關于日志的確認回滾操作,在后面會另設專門章節講述。

2.8.4.5 S--Z SCAN {(E)}(Scan Character String)掃描字符串

掃描字符或字符串Factory 1 在目標字符串Factory 2 中是否存在Factory 1 Operation Factory 2 Result HI LO EQ

FLD01 SCAN FLD02 N 26

FLD01 可以是字符,也可以是字符變量;可以是一位長,也可以是多位長。

當FLD01 在FLD02 中存在時,EQ 指示器打開,即*IN26=’1’,同時將FLD02 中的起始

位置,賦值給N;

當FLD01 在FLD02 中不存在時,EQ 指示器保持關閉狀態,即*IN26=’0’,同時N=0

允許從FLD02 中的指定位置開始檢查:

FLD01 SCAN FLD02:2 N 26

如上句,即表示從FLD02 的第2 位,開始掃描。

在實際使用中,比如說我們判斷某個字符是否為數字,就可以先定義一個0—9 的常量,然后將要判斷的字符去SCAN 一下這個常量

SELECT(Begin a Select Group)分支語句

在操作碼“OTHER”中講過,為方便讀者,列出簡單語法如下:

Factory 1 Operation Factory 2 Result HI LO EQ

SELECT

WHEN 條件判斷

1處理語句1

WHEN 條件判斷2 處理語句

2OTHER

處理語句

3ENDSL

要注意,SELECT 操作碼,必須有對應的ENDSL 操作碼,否則編譯無法通過。

SETGT {(E)}(Set Greater Than)定位操作—大于

舉個例子吧,假設文件中有一個字段,是標識順序號的,1、2、3、4。即該字段為1,表示第一條記錄,該字段為2,表示第2 條記錄。那么: Factory 1 Operation Factory 2 Result HI LO EQSETGT 文件記錄格式名

READ 文件記錄格式名

這個READ 操作,READ 到的,是第3 條記錄。也就是說,SETGT 操作碼,會將游標

定位到大于鍵值的第一條記錄前。

在實際使用中,如果我們是按邏輯文件讀取,而且讀了一條記錄之后,對其鍵值相同的 記錄都不需要再讀取時,就可以用SETGT,不過需要注意,Factory 1 項,需要是與鍵值相

同的變量,即如果文件是使用多個字段做為鍵值,那么我們也需要先定義一個組合鍵值的變

量,然后Factory 1 處填寫這個組合鍵值的變量名。

當聲明文件的鍵值有多項時,Factory 1 項的鍵值,允許小于文件的鍵值,但順序必須

一致。即聲明的文件如果鍵值為:FHS01、FHS02、FHS03,那么我們在程序中定義三個類

型與之相同的變量FLD01、FLD02、FLD03,以下寫法都是有效的FLDKEY KLIST

KFLD FLD0

1KFLD FLD0

2KFLD FLD03 FLDKEY SETGT 文件記錄格式名

FLDKEY KLIST

KFLD FLD01

KFLD FLD02

FLDKEY SETGT 文件記錄格式名

FLD01 SETLL 文件記錄格式名

SETLL {(E)}(Set Lower Limit)定位操作—小于

語法與SETGT 相同,含義與SETGT 不同。SETLL 操作碼,會將游標定位到與鍵值相

等的第一條記錄之前,仍是上例,如果是 2 SETLL 文件記錄格式名

READ 文件記錄格式名

那么READ 操作碼讀到的記錄,就是第2 條記錄,看到了吧,和SETGT 不同。

SETLL 操作碼還可以用來簡單判斷當前鍵值是否存在有記錄,以PFFHSL3 為例(鍵值

為FHS01、FHS02)

Factory 1 Operation Factory 2 Result HI LO EQ

FHSKEY KLIST

KFLD FLD0

1KFLD FLD0

2EVAL FLD01=’01’

EVAL FLD02=’02’

FHSKEY SETLL 文件記錄格式名 44

當文件中有相應記錄時,EQ 指示器打開,即*IN44=’1’

當文件中無相應記錄時,EQ 指示器關閉,即*IN44=’0’(與CHAIN 正好相反,要注意)

而在這種用法中,SETLL 與CHAIN 的區別在于,CHAIN 是定位讀取了記錄,而SETLL 僅僅只是判斷該記錄是否存在。所以用SETLL 操作,不能修改記錄,也無法取出記錄的值。

只能判斷記錄是否存在。如果要修改記錄,或取出記錄的值,還需要有一個讀取定位的操作,如READ,或READE、READP 等(最常用的,應該就是READ 操作)

SETOFF(Set Indicator Off)關閉指示器

Factory 1 Operation Factory 2 Result HI LO EQ

SETOFF 10 11 1

2等價于

EVAL *IN10=’0’

EVAL *IN11=’0’

EVAL *IN12=’0’

在SETOFF 這個操作碼中,指示器填在HI、LO、EQ 哪里都沒關系,都是表示要被關

閉的指示器

SETON(Set Indicator On)打開指示器

Factory 1 Operation Factory 2 Result HI LO EQ

SETOFF 10 11 1

2等價于

EVAL *IN10=’1’

EVAL *IN11=’1’

EVAL *IN12=’1’

在SETON 這個操作碼中,指示器填在HI、LO、EQ 哪里都沒關系,都是表示要被關閉的指示器

SHTDN(Shut Down)

沒用過

SORTA(Sort an Array)沒用過

SQRT {(H)}(Square Root)開方

Factory 1 Operation Factory 2 Result HI LO EQSQRT 3 N

這時,N=3(因為3 的平方為9)9、3 都可以是數字型變量,或者直接是數字 SUB {(H)}(Subtract)減法操作

Factory 1 Operation Factory 2 Result HI LO EQ

FLD01 SUB FLD02 FLD0

3SUB FLD02 FLD03

看過前面的ADD、MULT 操作碼,這里不用解釋也應該明白是什么意思了吧。那就不

多說了。

SUBDUR {(E)}(Subtract Duration)日期相減

1.減日期

Factory 1 Operation Factory 2 Result HI LO EQ

FLD01 SUBDUR N:*Y FLD02

表示將日期型變量FLD01 減去N 年,賦值到日期型變量FLD02 中;

N 可以是一個數字型變量,也可以就是一個數字,N 允許為負數 *Y,*M,*D(還有其它的參數值,可見ADDDUR,其中有詳細解釋)

2.判斷兩個日期型變量之間的天/月/年數

Factory 1 Operation Factory 2 Result HI LO EQ

FLD01 SUBDUR FLD02 N:*D

這時,N 做為一結果變量,表示日期型變量FLD01 與FLD02 之間的天數

SUBST {(P | E)}(Substring)取字符/字符串 Factory 1 Operation Factory 2 Result HI LO EQSUBST FLD01:3 FLD02

表示從字段FLD01 的第3 位開始,取2 位,左對齊賦值到字段FLD02 中。

要求字段FLD01 的長度必須大于或等于3+2 位,否則程序會報錯。

可以嘗試用%SUBST 語句,也是等價的,如下

EVAL FLD02=%SUBST(FLD01:3:2)

表示的是同樣的意思。

起始位數3,取的長度2,在兩種寫法之下,都可以使用數字型變量來表達。

相比較之下,%SUBST 還有一種用法,就是對字符的指定位置賦值,這個就厲害了:

EVAL %SUBST(FLD02:3:2)=’01’

看到了吧,這句話就是說,使字段FLD02 的第3、4 位(即從第三位開始,兩位長)等

于“01”

TAG(Tag)定義標簽,與GOTO 同用

Factory 1 Operation Factory 2 Result HI LO EQ

FHSTAG TAG

TEST {(D | T | Z | E)}(Test Date/Time/Timestamp)

沒用過

TESTB(Test Bit)

沒用過

TESTN(Test Numeric)

沒用過

TESTZ(Test Zone)

沒用過

TIME(Time of Day)--取當前系統時間 Factory 1 Operation Factory 2 Result HI LO EQ

TIME FLD01

FLD01 可以是時間型或數字型變量

UNLOCK {(E)}(Unlock a Data Area or Release a Record)解鎖

Factory 1 Operation Factory 2 Result HI LO EQ

UNLOCK 文件記錄格式名

UNLOCK 是解鎖操作,在某種程度上,可以將UNLOCK 視為ROLBK,將UPDATE

視為COMMIT。即如果鎖定某條記錄,并對其字段進行賦值之后,使用UPDATE 語句,將

會把修改后的結果保存下來,即修改文件,而UNLOCK 語句則不會修改文件,即否認了之 前對文件字段做的賦值修改。

從程序的執行效率上來講,UNLOCK 的執行效率是高于UPDATE 的,因為UPDATE

操作時,系統需要對文件的每一個字段進行確認處理(DEBUG 時可以看到),而UNLOCK 就

是簡單的解鎖而已。

UPDATE(Modify Existing Record)修改記錄

語法與UNLOCK 一樣。

這里需要說明一下,在執行UPDATE 的時候,必須先使用READ、CHAIN 等操作碼鎖

定一條記錄。如果未鎖住記錄,UPDATE 操作碼將會報錯。當執行了UNLOCK、UPDATE、以及ROLBK 語句時,等于是解鎖,此時再執行UPDATE 操作碼之前,必須再次鎖住記錄

操作;

WHEN {(M | R)}(When)分支判斷語句中的條件判斷

在操作碼“OTHER”,“SELECT”中都講過,仍列出簡單語法如下:

Factory 1 Operation Factory 2 Result HI LO EQ

SELECT

WHEN 條件判斷1 處理語句1

WHEN 條件判斷

2處理語句2

OTHER

處理語句

3ENDSL

WHENxx(When True Then Select)

上面的語法,是RPGLE 的語法,WHENxx 是RPG 的語法,也就是

SELECT

FLD01 WHENEQ FLD02

處理語句

1……..這樣的語法,在表達復雜的邏輯關系時,必須與ANDxx,ORxx 一起使用,所以我不

使用WHENxx 這個操作碼。

WRITE(Create New Records)寫記錄

常用的方式:

Factory 1 Operation Factory 2 Result HI LO EQ

CLEAR 文件記錄格式名

EVAL 文件字段1=xxxx

EVAL 文件字段2=xxxx

WRITE 文件記錄格式名

表示在文件中寫入一條新記錄。文件需要聲明為可寫的。

通常會在給文件字段賦值之前,作一次CLEAR 操作來進行初始化,以避免不必要的麻煩。XFOOT {(H)}(Sum the Elements of an Array)

沒用過,看幫助,是表示對數組字段的累加統計。

假設DIMDATA 定義為一個數字型的數組變量,FHS01 為一個足夠大的數字型變量

Factory 1 Operation Factory 2 Result HI LO EQ

XFOOT DIMDATA FHS01

就表示將數組DIMDATA 中的所有記錄的值都取出來,匯總相加,賦值到數字變量

FHS01 中

XLATE {(P | E)}(Translate)

將一個字符串中指定的字符,更換成另外的字符。

舉例:如MYCHAR1,MYCHAR2 都是兩個20 位長的字符型變量

C MOVEL 'ABCAAAC123' MYCHAR1

C 'A':'9' XLATE MYCHAR1 MYCHAR2

執行過這個語句之后,MYCHAR2 就等于”9BC999C123’,即將字符串MYCHAR1 中所

有的“A”都變成了“9”;

XLATE 也可能指定起始位置。如上句更改為:

C 'A':'9' XLATE MYCHAR1:4 MYCHAR2

則MYCHAR2 等于“ABC999C123”,指從第4 位開始(含第4 位),將“A”變成“9”

賦值。

Z-ADD {(H)}(Zero and Add)向數字型變量賦值

Factory 1 Operation Factory 2 Result HI LO EQ

Z-ADD FLD01 FLD02

將數字型變量FLD01,賦值到數字型變量FLD02 中。

Z-ADD、MOVE 雖然同是賦值操作碼,但Z-ADD 的用法就遠沒有MOVE 那么變化多

端,只能在數字型變量之間賦值。所以也沒有什么可說的了。zero 如果要對數字型變量賦初值,使用*ZERO

Z-ADD *ZERO FLD02

Z-SUB {(H)}(Zero and Subtract)用0 減

Factory 1 Operation Factory 2 Result HI LO EQ

Z-SUB FLD01 FLD02

等價于

0 SUB FLD01 FLD02

等價于

EVAL FLD02=FLD01*(-1)

*ALL

*ALL 是個很有意義的變量,舉例:

EVAL FLD01=*ALL’0’

表示將字符型變量FLD01 賦值為全’0’

CLOSE *ALL

就表示關閉所有文件,意義與上面是不同的%LEN

取字符串的長度,舉例:

(MYLEN 為數字型變量,FLD01 為字符型變量)

EVAL MYLEN = %LEN(FLD01)

這句話的意思,是指取字符串FLD01 的長度,不過通常這樣用是沒意義的,因為直接

用%LEN 操作碼,取到的是字符串的總長度,不是有效字符的長度,也就是說FLD01 長度

為2,那么MYLEN 就恒等于2,不會變。就算變量FLD01 中沒有值,取出的MYLEN 也等

于2.。所以,%LEN 通常會與%TRIM 或是%TRIMR 一起使用,語法在下面介紹。

%TRIM,%TRIMR

都是去字符串變量中的空字符意思,%TRIM 是去字符串左邊的空字符;%TRIMR 是去

字符串右邊的空格。

通常我們在寫程序中,都是默認字符串變量左對齊,所以我們使用%TRIMR 操作碼的概率應該高一點。舉例:

EVAL MYLEN = %LEN(%TRIMR(FLD01))

這時的MYLEN,就是指變量FLD01 中的有效長度(前提條件是FLD01 中如果有值,是左對齊)。如果FLD01 為空,那么MYFLEN 為0;如果FLD01 首位有值,第二位為空,那么MYLEN 為1;如果FLD01 兩位都不為空,那么MYLEN 就等于2。

如果字符串左對齊,那么就使用%TRIMR

還有一種用法,假設字符串FLD04 為4 位長的字符,FLD01,FLD02 都是2 位長的字

符,且FLD01 等于“A ”,FLD02 等于“BC”,那我們執行:

EVAL FLD04 = FLD01 + FLD01 + FLD02

FLD04 就等于“A A ”,也就是第二位與第四位都是空的,最后加的FLD02 其實無

效。

而如果執行

EVAL FLD04 = %TRIMR(FLD01)+ %TRIMR(FLD01)+ FLD02

則FLD04 就等于“AABC”,也就是說,在這里,%TRIMR(FLD01),是等價于單字符

“A”的MONITOR

監控程序信息。據說是可以屏蔽掉出錯信息,避免程序異常中斷,未經測試。

第二篇:《程序員崗前培訓手冊》

程序員崗前培訓手冊

北京應用技術大學

目錄(CONTENTS)

前言

面試是雙向選擇

軟件公司研發技術崗位掃描與崗位職責

如何快速融入技術團隊(程序員入崗的注意事項)優秀程序員應具有的品質與習慣 談談學習方法

外包軟件、商品軟件、項目軟件簡介

前言

同學們經過在北京應用技術大學兩年的學習,都滿懷憧憬地向往程序人生的開始,也對即將走上的工作崗位和環境充滿了期待,期待通過程序來證明自我的價值。程序員,相信在很多同學眼中是一個有趣、特別、高薪、充滿艱辛而又非常神秘的職業,因為手下那一行行跳動的代碼不僅實現了生動的功能,同時也表達著程序員對人生的理解和追求。當程序員實現了一個獨到的創意之后準備熄燈休息時,天已蒙蒙亮…..當程序員看著用戶熟練地操作自己的軟件解決一個個復雜事件時,臉上那寫滿成就的微笑…..的確在這個行業里出現了太多的英雄人物和企業,而每一個英雄的事跡和成就都足以讓我們熱血沸騰、摩拳擦掌……

在同學們即將步入程序員崗位之前,需要對軟件研發相關職位的職責范圍與工作特點有所了解,掌握一些入職的基本技巧和注意事項,檢查自己的技能與行為習慣,有的放矢,提高面試和就業的成功率。入職后能盡快地融入到技術團隊,近而快速成長,成為團隊技術骨干和最優秀的職員。在工作中養成積極而良好的行為習慣和職業素養,為自己的職業發展創造一個良好的開端。

本手冊從面試、技術崗位職責、如何快速融入技術團隊、優秀程序員的品質與習慣、學習方法、外包軟件/商業軟件/項目軟件簡介等幾個方面闡述了同學們在踏入工作崗位之前應該了解的知識和注意事項。

面試是雙向選擇

一般同學都會誤認為面試時應聘者處于弱勢,要接受招聘者的挑選,從而從心理上承受很大的壓力,而影響自己正常的發揮和才能展示。其實大可不必,因為面試是雙向的,選人和擇業是平等的。況且現在市面上的用人單位或招聘崗位也是良莠不齊,甚至還有一些騙子公司,這就要求同學們在應聘時擦亮眼睛,注意分辨。當然大多數公司都是良性的,他們要么是已具規模,各部門及崗位功能分工很明確,他們會根據業務的發展或作為人才儲備而有針對性的招聘相關技術人員,而有的公司可能是剛剛成立,業務與核心技術還未形成,他們需要招聘到能為他們提供解決方案或創意的技術人員,所以對于這些類型的公司,他們對人才的渴求也都不亞于同學們對工作崗位的渴求,若是聘到一個優秀的技術人員對業務或項目的推進將會使公司獲得更大的利益,或者使公司的發展少走彎路甚至能改變一個公司的命運。相反,如果招不到合適的人才或者使用一個較差的技術人才,不但不能推進項目的進展,還要花費幾個月的培養時間和費用,甚至阻礙業務開拓甚至項目擱淺。所以當同學們想得到一個工作崗位的同時,也要看到企業更需要一個優秀的員工,二者是平等的。在面試時,同學們在一種非常平和的心態下,充分發揮,盡可能地展示自己已經掌握的技能,展示學習能力和發展潛能;另一方面也要盡可能地提前了解公司的背景和業務以及應聘崗位的職能,從而加以辨別和選擇。一旦本次面試不能成功,表明要么崗位不適合你,要么你不適合崗位,或者因為你本次的表現不佳,這都是很正常的,一定不要有挫敗感,要及時總結面試時的表現方式以及溝通技巧,若感覺自己的確能夠勝任該崗位,只是因為自己的臨場發揮不佳而沒有展示出自己的實際水平,也可及時和招聘公司聯系,經詢問確認對方沒有找到合適人選的情況下,表明誠意,請求復試機會。總之,若本次失敗,一定不要影響下一次的面試,要積極總結,為一下次面試作準備。

正常運營的公司因業務的不斷發展,人才需要不斷的更新、補充和儲備,所以他們一直都需要人才,況且公司每次組織招聘都會花費一大筆費用,也希望能夠找到合適的人才,所以公司面試時一般不會出太吊鉆的問題來為難你,同學們也不要過分擔心。

另一方面,同學們在堅信“天生我才必有用”的同時,也要正確看待現在的就業形勢,對第一份工作也不要過于理想化,要擺正心態,堅持從基層做起,先就業再擇業,職場上“騎驢找馬”也未必不是一種現實的理性選擇。

總之,面試是雙向性的,是招聘單位與同學們相互展示、相互認識、互相挑選的一次溝通過程。同學們 在求職的過程中,要正確看待面試,放下思想包袱,充分重視,充分準備,從容應對。

軟件公司研發技術崗位掃描與崗位職責

一般中小型軟件公司設置的技術崗位有:研發總監、項目經理、需求分析人員、系統架構與分析人員、數據庫設計人員、程序員、項目助理與文檔專員、測試人員、技術支持(售前/售后)、美工或網站前臺人員等,這些職位的工作聯系非常密切,根據公司規模的大小,以上職位可由一人或多人兼任,比如一個小型的軟件公司可能只有一個人完成軟件的總體設計、架構、編碼、測試、文檔等工作。這些崗位的職責范圍大致是:

研發總監:全面負責研發及技術部門的整體工作。

項目經理:在整個項目開發過程中組織項目所需的各項資源,對項目的范圍、項目的質量、項目時間以及項目成本進行管理與控制。根據項目范圍、質量、時間與成本的綜合因素的考慮,進行項目的總體規劃與階段計劃,保證項目組目標明確且理解一致;在項目生命周期的各個階段,跟蹤、檢查項目組成員的工作質量;保證項目在預算成本范圍內按規定的質量和進度達到項目目標。

需求分析人員:項目前期與客戶方打交道最多的人,對于客戶來說,他可以代表整個項目組,對于項目組成員來說他的意見可以代表客戶方的意見,項目組內所有與客戶需求相關的事情必需得到他的認可。他的工作主要是:

1、在項目前期根據《需求調研計劃》對客戶進行需求調研。

2、收集整理客戶需求,負責編寫《用戶需求說明書》。

3、代表項目組與用戶溝通與項目需求有關的所有事項。

4、代表客戶與項目組成員溝通項目需求有關的所有事項。

5、負責《用戶需求說明書》得到用戶的認可與簽字。

6、負責將完成的項目模塊給客戶做演示,并收集對完成模塊的意見。

7、完成《需求變更說明書》,并得到用戶的認可與簽字。

8、協助項目組有關人員對需求進行理解。

系統架構與分析人員:是項目的總體設計師,組織構建新產品的開發與集成、新技術體系等,也可以理解為技術總監。是在技術上對所有重要事情做出決定的人。系統架構在整個軟件開發過程中都起著非常重要的作用,并隨著開發進程的推進而其職責或關注點不斷地變化。

1、在需求階段,負責理解和管理非功能性系統需求,比如軟件的可維護性、性能、復用性、可靠性、有效性和可測試性等。審查客戶和市場人員所提出的需求,確認開發團隊所提出的設計;組織開發團隊成員和開發過程的定義;協助需求分析師完成《用戶需求說明書》、《需求變更說明書》等。

2、在設計階段,負責對整個軟件架構、關鍵模塊、接口的設計。對系統進行分析與建模,完成《系統架構說明書》、《系統概要設計說明書》、《系統詳細設計說明書》。

3、編碼階段,成為程序員的顧問,負責重點代碼檢查,并且經常性地要舉行一些技術研討會、技術培訓班等;

4、測試及實施階段,隨著軟件開始測試、集成和交付,集成和測試支持將成為工作重點;

數據庫設計人員:根據《系統架構說明書》負責進行數據庫選型與建模。由于數據庫是整個系統運行的核心,數據庫設計的好差直接影響著整個系統的開發效率和系統運行的優劣。他是項目組中唯一能對數據庫進行直接操作的人,對數據庫結構的每一次改動都要得到他的認可。主要職責:

1、根據數據庫建模結果,繪制數據庫關系圖。進行數據庫建庫以及數據庫進行初始化操作。

2、對數據庫進行維護、備份、恢復、同步。

3、負責客戶數據的導入導出。

4、根據《系統詳細設計說明書》編寫對應的視圖、存儲過程、函數、觸發器等。

5、對項目組其它成員進行SQL方面的指導。

6、為測試建立相關測試數據。

程序員:負責系統的最終代碼實現。主要職責:

1、參與需求調研、項目可行性分析、技術可行性分析和需求分析。

2、協助完成《系統詳細設計說明書》,并根據《系統詳細設計說明書》進行編碼實現;

3、對自己代碼進行復查,并進行簡單的測試。

4、撰寫相關技術實現或功能描述文檔。

5、負責向項目經理及時反饋軟件開發中的情況,并根據實際情況提出改進建議。

6、參與軟件開發和維護過程中重大技術問題的解決。

項目助理或文檔專員:協助項目經理在項目日常管理和數據分析方面的工作,進行與項目有關的協調工作,編寫項目進度報表,參與組織項目協調會,組織項目非技術文檔的編寫、傳遞與歸檔,以及與市場人員或其他部門的日常溝通,協助項目資源協調工作。跟蹤項目進展。項目或軟件包的打包、發布以及授權鎖的制作等工作。

測試員:負責實施軟件測試。測試是整個項目系統中非常重要的一個環節,項目質量的保證,他的主要工作就是找到項目中存在的不合理、不合格的部份,并要求項目其它成員按其給定的項目質量完成項目。保證了系統功能實現是否與功能設計和需求定義一致。主要職責:

1、根據軟件項目規范編寫測試計劃,設計測試數據和測試用例。

2、采用合適的測試方法實施軟件測試,形成各階段的測試報告,并對軟件問題進行跟蹤分析和反饋,推動測試中發現問題及時合理地解決。

3、完成對產品的集成測試與系統測試,對產品的功能、性能及其他方面的測試負責。

4、協助程序員進行軟件代碼檢查,提出對軟件的進一步改進的要求。

技術支持人員:主要負責軟件產品或項目在技術層面上與客戶的交流,根據工作重點分為售前支持和售后支持。

? 售前支持:是銷售人員和開發人員的橋梁,協調銷售人員、用戶、開發人員的關系,制作產品功能演示PPT文檔或多媒體資料,將公司的技術實力向用戶展示,技術標書的撰寫,定期采集、分析和整理用戶的需求,配合銷售制訂產品銷售策略,從技術上支持市場銷售業務等。

? 售后支持:負責編寫《用戶手冊》、《操作手冊》,制作系統操作視頻教程等多媒體培訓教材;負責系統實施(包括系統安裝、用戶培訓、系統試運行等),協助用戶進行“用戶確認測試”和編寫《確認測試報告》;通過電話、網絡、及時通訊等多種渠道解答用戶在使用中的問題,提供售后服務。收集、整理用戶的建議等。

美工或網站前臺人員:負責完成軟件設計師安排的功能界面設計和簡單網站的設計。

1、負責對項目整體色彩的調配。

2、向系統分析師提出項目美化的建議。

3、為BS 項目提供一套或幾套CSS樣式表及HTML結構表

4、為CS項目提供符合項目內容的靜態、動態圖片。

5、并為程序員提供界面指導。

如何快速融入技術團隊

——程序員入崗的注意事項

同學們剛剛結束學校的集體生活,面對新的工作環境、新領導、新同事、新任務、新的制度、新的生活節奏,很多的變化需要你盡快適應,很多的事情需要你獨擋一面,而又有許多事情需要你與同事通力協作來完成…… 以下是新程序員入職后盡快融入技術團隊應注意的事項:

1、認真學習公司的發展背景與歷程、主營業務以及規章制度。

進入公司前可能對公司已經有了一些了解,入職后,相關人力資源管理部門會組織培訓,解讀公司文化,介紹公司發展背景、主要職能部門以及主要業務特點,學習公司考勤、人事、辦公等管理規定和規章制度。有些新入職的程序員或技術人員,認為這些不含技術成分沒有必要花精力去學習,其實這種認識是錯誤的,公司文化及各種制度是整個公司的靈魂,是公司正常經營活動保障和員工行為的一種約定,新職員只有對公司的發展背景和經營狀態有充分的了解,接受公司文化,高度認同公司的核心價值觀,嚴格遵守各種規章制度,才能自覺地規范自己的行為習慣,在工作學習中才有主動性,遇到工作壓力時也能坦然地接受,不會有抵觸心理,從而能更快地推動自己的工作。

2、積極學習業務知識、類庫及現有程序資源,把握學習的技術方向。

程序員入職后,若有一個成熟的開發團隊,一般都會有一個老職員來帶領學習,這一階段主要有三個方面的學習任務,第一是公司業務知識,因為程序員只有對業務知識熟悉了,才能更好的理解和把握功能需求,比如做通信方面的軟件,你要學習一些通信行業知識;若做財務軟件,你要了解一些財務知識。第二,現有的類庫是公司開發部門積累的程序資源,學習和使用它可以規范統一程序的風格,提高開發的速度,掌握并能使用這些資源,可使你盡快與老職員有程序上的共同語言。第三,學習并加強在此領域的編程技能,因為在學校學習的是通用的知識,掌握的是一種知識導入與學習的方法,那么在公司應用方面也許要求你某一個方面很精通,比如網站的前臺、數據庫、圖形處理、多媒體、網絡編程等某些方面的技能需要強化。案例:

小張(男)和小胡(女)是同一個大學畢業的應屆生,在2005年4月份同時進入公司做技術支持,當時兩人的工資都是每月1500元,而兩年后的今天小胡已是研發部的一個程序員,工資是每月4300元,而且是公司重點培養的對象之一。小張現在還是在做技術支持,工資是每月2600元,他們兩人可以說是起點相同,但兩年的發展卻讓他們有了明顯的差距,小胡比較愛學習,工作非常踏實,對業務知識也掌握得非常精通,而且在做技術支持工作的時候,業余時間學習編程,由于做技術支持與程序員交流比較多,小胡抓住了這個學習編程的機會,但她從不在公司上班時間學習程序,在做技術支持工作時,她上班時間鉆研業務知識、軟件需求、學習程序實現的思想,業余時間練習代碼。在做技術支持一年后,她通過了研發部的考核,進入研發部開始做編程。而小張與她對比就不同了,他只是做好本質工作,沒有潛心學習,對業務知識、軟件知識只是一般了解,工作上很業績平平,總體上不出色也沒出大的差錯。工資漲得當然也慢,小張和小胡的起點相同,但小胡比較主動學習,很明顯他們兩個在職場上的差距就拉開了。

3、展示進步,創新思考,體現價值。

入職之初,通過積極的學習與適應,應該說進步是非常快的,要及時的總結,并把工作學習的總結和進步程度及時向主管匯報(口頭、郵件、書面),階段工作總結應包括以下幾點:已經完成的工作、技術上的進步、業務上的進步、從學生到職員心態上的轉變、八小時之外的學習狀態等。這樣一方面可以疏理一下知識結構,把握自己的學習階段,一方面讓主管根據你的知識結構和技能狀態有針對性地給你分配合適的任務。

另外在工作當中也要注重思考,對工作進行適當的改進,并提出改進意見,這樣能更快是體現出你的進步和工作價值。

4、積極參加團隊活動,適應團隊文化,創造與團隊成員友好而積極的協作氛圍。

能盡快適應團隊文化,與同事友好溝通是任何崗位都需要的職業素質,只是在研發團隊里要顯得尤為重要,由于研發工作的重要與特殊性,若在軟件商品化和產品化的開發階段,不良的溝通協作可能導致項目的流產。另外,部分程序員寫程序久了都會很注重與機器或代碼交流,有的不容易與新職員交流,有的他們因有大量的工作任務而顧不上,有的是因為他們有太多的思想與創意,和一個新來的職員沒有共同語言,有的是人為設置“技術壁壘”(因擔心新職員威脅到自己的崗位,而不愿傳授一些知識)。那么新職員一定不要因為他們沒有主動與你交流而放棄交流,或者認為自己被冷落而與逐漸遠離團隊,而是要在適當的時間與他們主動交流,主動向他們請教,積極參加團隊的集體活動,創造與同事交流合作的良好氛圍。要盡可能地為團隊多做貢獻,不要因為多干一些工作或多加一點班,就有不良的情緒,從而影響正常的溝通與交流。另外,在研發團隊里的溝通與協作,還體現在代碼上,自己設計的功能模塊是否能為別人提供良好的說明和程序接口。總之,與同事友好愉快的協作,盡快融入研發團隊,是新入職的程序員技術快速進步和穩定職位的重要因素。

5、正確面對工作壓力,學會釋放“厭職”情緒。

許多同學進入一個新的工作環境,面對的是很多新事物,感覺工作節奏太快,工作壓力太大。其實新職員有工作壓力也是正常的,從職業生涯發展的角度來看,這種工作壓力是非常必要的。同學們在進入公司后,要勇于接受工作壓力,把這種壓力作為進入初職鍛煉的良好機會,樹立良好的心態,不要逃避,更不要產生“厭職”情緒,公司還正在培養你,你卻選擇退縮而自炒“魷魚”。工作中要學會積極與同學溝通,注意工作方法,釋放和減輕壓力。其實我發現一些新職員說工作壓力大,做事不順心,仔細分析之后可以發現他們感覺的工作壓力大與“不合群”有很大的關系。有些同學到公司后,一坐下就是八小時,語言和行為與同事格格不入導致他不敢言語不敢行動,下班時間到了,其實他不是工作學習本身的累,他們感到更累的是“心”。這些新職員在工作中總是希望別人主動接近自己,自己卻不會主動與人交流,時間長了,同事覺得他“不愛說話”,也就逐漸放棄了與他的交往,這時他又會感到被排擠,感到孤獨,心理壓力就會增大。另外技術上單打獨斗,不能利用別人的資源,因此完成相同的工作,付出的努力和壓力就要比其他同事大得多。所以新職員在入職之初,一定要正確看待工作上正常的工作壓力,學會與團隊成員友好相處,創造一種“如魚得水”的工作氛圍,那么真正技術上的壓力都不會成為問題的。

如果公司還沒有成熟的開發團隊,需要你一個人承擔開發項目,著手組建開發團隊,那么就要求你充分一切時間,利用網絡資源,有技術難點及時到網絡上尋求幫助,同時與相關部門人員密切合作,保持動態及時的溝通,及時報告工作進度,爭取盡快擬出解決方案或產品。

優秀程序員應具有的品質與習慣

? 善于理解與把握需求

程序員的勞動成果就是滿足需求的程序,那么在動手寫代碼之前,只有完整地理解一個模塊的需求才能做出好的程序,優秀的程序員在分析需求的基礎上,應該能抓住問題的關鍵技術,從而能夠建立合適的數據模型,盡量在代碼中少走“彎路”。? 善于學習與總結

當然善于學習,是對任何行業任何職業的最根本的要求,對于程序員,這種要求就更加高了。其實研發部門招聘程序員,其實并不一定注重你現在能做什么,而更注重的是你的學習能力、你的編程潛力,因為程序員是很容易被淘汰,很容易落伍的職業,一種技術可能僅僅在三兩年內具有領先性,若你不能跟進新的技術,不學習新的技能,那么不斷出現的新技術會使你顯得非常笨拙。善于總結,也是學習能力的一種體現,每次完成一個研發任務,完成一段代碼,都應當有目的的跟蹤該程序的應用狀況和用戶反饋,隨時總結,找到自己的不足,這樣逐步提高,才能成長起來。

? 規范化的編碼習慣

養成良好的編碼習慣,比如:變量命名清晰,語句嵌套明確,函數具有獨立功能,適當注釋等等,因為這些不但有助于代碼的移植和糾錯,也有助于不同人員之間的協作。? 良好的文檔習慣

良好的文檔是正規研發流程中非常重要的環節,作為代碼程序員,30%的工作時間寫技術文檔是很正常的,而作為高級程序員和系統分析員,這個比例還要高很多。缺乏文檔,一個軟件系統就缺乏生命力,在未來的查錯,升級以及模塊的復用時就都會遇到極大的麻煩。? 代碼復用性,模塊化思維能力

復用性設計,模塊化思維就是要程序員在完成任何一個功能模塊或函數的時候,要多想一些,不要局限在完成當前任務的簡單思路上,想想看該模塊是否可以脫離這個系統存在,是否可以通過簡單的修改參數的方式在其他系統和應用環境下直接引用,這樣就能極大避免重復性的開發工作,如果一個軟件研發單位和工作組能夠在每一次研發過程中都考慮到這些問題,那么程序員就不會在重復性的工作中耽誤太多時間,就會有更多時間和精力投入到創新的代碼工作中去。? 團隊精神與溝通協作能力

這是程序員應該具備的最基本的,也是最重要的安身立命之本。軟件或項目的各模塊功能需求的理解準確,一個功能實現的修定,是否會影響其他模塊等,沒有充分及時的協作對一個項目來說幾乎是不可想象的。我做了幾年開發,感覺溝通真的太重要了,其實軟件研發過程中最重要的不是技術問題,而是管理中的溝通問題,比如初級程序員或許是礙于面子或其他原因,不懂的問題也不想問,總是把問題掖著藏著,而高級程序員又不理解初級程序員的開發任務總是完不成,其實可能是高級程序員不了解初級程序員的真正困難,或者沒有把要實現的邏輯和思路講解清楚。合作起來總會有一些不透徹,要么一個問題討論多次依然是問題沒有結果,要么是有些問題根本不反映,大家都掖著藏著,報喜不報憂,待到問題暴露已無法挽回,嚴重的阻礙了項目的進度。所以我最好的建議就是,高級程序員應該把問題講到明白為止,初級程序員應該把問題問到明白為止,并且不僅僅是口頭上講明白、聽明白,還一定要形成文字,現在網絡非常方便,公司都會有企業郵箱,把問題的討論過程通過mail的形式記錄保存,明確確認,這樣障礙才能去除,項目才能得以順利進展。

案例1:

陳某是北京某重點大學自動化專業的畢業生,編程基礎知識非常扎實,在學校學習期間也有許多代碼積累,從技術上說應該是很有潛力的,但他性格有點孤僻,不太容易與同事溝通,當時錄用他時公司是看在他的編程基礎很好,以為在研發部大家多帶動他,應該會好些的。進公司有兩個多月了,一次在做某油田項目中負責其中一個小模塊的開發,在開發過程中我經常詢問他有沒什么問題,他每次都有些含糊地說沒有。可當項目交付的時候,發現他做的某一功能與當初功能定義不符,客戶就抓住這一點說與合同中需求描述不符,由此延期支付28萬的余款,使該項目后期維護起來非常被動。而導致這一結果就是陳某在做程序時有問題自己繞過去了,沒有及時與項目組成員交流,而獨自采用了他熟悉的一種解決辦法。項目匯報會剛結束,人事部門就通知陳某交接工作,到財務結算工資…..文摘:下面這故事《請按一下九層》我一直和我的同事們分享。是《讀者》中的一篇文章: 這是全市最忙的一部電梯,上下班高峰時期,和公共汽車差不多,人挨著人。上電梯前和公司的人力資源總監相遇,說笑間,電梯來了,我們隨人群一擁而進。每個人轉轉身子,做一小小的調整,找到了一種相對融洽的關系。這時,一只胳膊從人逢中穿過來,出現在我的鼻子前頭。我扭頭望去,一個小伙子隔著好幾個人,伸手企圖按電鈕。他夠得很辛苦,好幾個人剛剛站踏實的身子不得不前挺后撅,發生了一陣小小的騷動。

那個人力資源總監問道:“你要去哪一層?”“九層。”有人抬起一個手指頭立刻幫他按好了。沒有謝謝。

下午在樓道里又碰到那個人力資源總監。“還記得早上電梯里那個要去九層的小伙子嗎?”她問我。

“記得呀,是來應聘的吧?”九層,人力資源部所在地。“沒錯,挺好的小伙子,可我沒要他。”“為什么?”

“缺少合作精神。”她露出一副專業HR的神情,“開口請求正當的幫助對他來說是件很困難的事情,得到幫助也不懂得感激。這種人很難讓別人與他合作。”

我點頭稱是。如果那個小伙子坦然而自信地說一句“請按一下九層”,結果會怎樣呢?大家不但不會反感他的打擾,而且幫助他的人還會心生助人的快樂,最后他也能得到想要的工作。

這個故事表明,良好溝通不僅僅體現在禮貌地說聲“請”、“謝謝”,而是一個職員能夠創造愉快、高效、和諧工作氛圍的素質和習慣。

? 時刻修定自己的認識和行為與公司的核心價值觀(短期目標、長期目標)保持一致

公司或研發團隊在什么時段做什么樣的項目,或者根據項目進度的計劃,在什么時間做什么功能模塊,作為程序員要高度地與這些目標保持一致,不要在關鍵時刻“掉鏈子”,這是最重要的。

案例:

小張是公司里的轉正不久的程序員,很聰明,對新技術接受很快,缺點就是非常的貪玩,對項目組的事缺乏主動性和責任心,平時的工作中主管已經提醒過他多次要注意工作的責任心,但他都不太放在心上,對事依然是敷衍。一次在做上海鐵通的項目中,小張負責項目中的一個模塊,當軟件架構出來以后,需要出差上海為客戶現場演示和進一步確認需求,由于合同還沒有正式簽下來,所以此行的技術交流對公司能不能簽下這個項目至關重要,公司派由我和小張在內的項目組4人出差上海,臨行前我們多次開會研究方案,確保拿下這個項目,下午到了上海之后約好第二天上午與客戶見面,正當大家為第二天的交流捏一把汗,積極準備的時候,小張卻說是第一次到上海,要求先去外灘看夜景,在得到項目組的否定之后,小張竟一個人偷偷到外灘看夜景至到深夜才回到賓館。第二天的技術交流會上,小張負責的模塊問題最多,雖然最后整個項目的交流還算成功,公司總算簽下了這個項目,但小張也被辭退了。原因很簡單,小張一直沒有把公司的事放在心上,項目組出差第一目標是與客戶交流好,拿下項目,而小張出差上海的第一目標是看一下外灘。所以象小張這樣的技術上不管有多么出色,但總在公司的關鍵時刻“掉鏈子”,被公司辭退也是早晚的事。就在寫此案例的前幾天,在地鐵上我偶遇小張,談話中得知他被辭退后半年內又經歷了一家公司。而此刻他又在匆匆地找工作。

談談學習方法

說起學習的方法,其實每個人都有自己的學習方法,也許這種方法對我來說有用,但不見得就對所有的人有用。所以,不要盲目的跟著別人的學習方法學習,要思考屬于自己的學習方法。但以下幾個原則是要遵守的: ? 堅持學習。首先要有毅力,對編程的狂熱也可以在一定程度上起到幫助。學習編程應該說要經歷好奇——困難——容易——郁悶——成就感——困惑——輕松的幾個階段的循回,不管哪個階段都需要天天學習,堅持每天都要進步,不能半途而廢,培養一種堅持克服困難的毅力。案例: 記得開發團隊里有一個基礎不是太好的程序員,剛入職兩個多月,表現一般,有一天早上他眉飛色舞地在講述昨天電視中的一個情節,我聽到后就說了一句:“你還好意思說你看電視?”。他立刻明白了,就沒說什么。從此他的進步是可以說是突飛猛進的,代碼的質量和工作效率明顯上了一個臺階,對項目的推動也是有目共睹的。幾個月后的一次公司慶典上,他被評為“進步最快員工獎”,獎金3000元。獎后在他給我的Mail中發現了這句話:“你說我看電視的那句話改變了我的學習狀態….我現在是馬桶上、公交車上都在看書或筆記。”

? 堅持實踐。當你學到了一種新的技術或知識時,多實踐是鞏固學習的一種最好最有效的方法。這個實踐不是照著書上的例子做一遍,而是根據自己的能力,給自己出題,然后去完成它。只有這樣,你才能發現自己的不足,同時又增加了編程經驗。要成為合格的程序員,光會寫代碼是遠遠不夠的,更重要的是在實踐中思考創新。實踐的多少決定著“高手”和一般程序員界線,高手們并不是天才,他們是在無數個日日夜夜中磨煉出來的。成功能給我們帶來無比的喜悅,但實踐的過程卻是無比的枯燥乏味。

? 掌握編程思想。學一門語言,不能僅僅是語言,還要注重語言背后的思想方法,獲得提出問題,分析問題,解決問題的能力,不是為編程而學習,因為編程語言和我們日常所說的語言一樣,日常所說的語言是一種思想的表達,而編程語言是一種功能的實現。要學習它是如何來解決某一問題的,為什么要這樣去做,他總是要符合客觀事實的,存在某種邏輯,數據的組織,信息的傳遞,然后看該怎么樣用編程語言來表達自己的想法。

? 多問、多總結、多記筆記。“三人行必有我師”,也許在一次和別人不經意的談話中,就可以迸出靈感的火花。著名的交換蘋果理論說的是:“你有一個蘋果,我有一個蘋果,當我們互相交換蘋果后,我們仍然互得一個蘋果;你有一個想法,我有一個想法,當我們互相交換想法,我們則互得兩個想法”。遇到問題,上網查看一些技術論壇,看看別人對同一問題的看法,會給你很大的啟發。在這個網絡時代,資料到處都有,無論什么先進的技術,你可以問身邊的高手,問網上的同仁,只要查到資料,快的學上幾天慢的一兩個月也能學會,學會后總結出技術要點記下來,可寫在本子上也可寫在Blog上,編程技能的提高靠的是代碼的積累,把所有自己的代碼保存起來,并附有適當的筆記,這樣,到用到時才能信手拈來,才能獲得踏踏實實的進步。所以現在已沒有寫不出的程序了,寫不出不是因為不夠聰明,而是因為你沒有耐心和找 BUG 的細心。

? 不鉆“牛角尖”,只抓主要問題,一些不影響工作的難點只要會用就行,這也體現了OOP的思想,你只要知道一個技術能完成什么功能就可以,至于它是如何實現的可暫時放一放,有時回過頭來再看就不是什么難點了。當你遇到技術障礙的時候,不妨暫時遠離電腦,看看窗外的風景,聽聽輕音樂,和朋友聊聊天。當重新開始工作的時候,我會發現那些難題現在竟然可以迎刃而解。

外包軟件、商品軟件、項目軟件的操作模式簡介

軟件外包

就是一些發達國家的軟件公司將他們的一些非核心的軟件項目通過外包的形式交給人力資源成本相對較低的國家的公司開發,以達到降低軟件開發成本的目的。因為軟件開發的成本中70%是人力資源成本,所以,降低人力資源成本將有效地降低軟件開發的成本。軟件外包已經成為發達國家的軟件公司降低成本的一種重要的手段。軟件外包的大幅度增長為人力資源成本相對較低的印度和中國帶來了新的發展機會。企業與企業之間的外包就是:企業(A)為了專注核心競爭力業務和降低軟件項目成本,將軟件項目中的全部或部分工作發包給提供企業(B)完成; 商業軟件 商業軟件(又叫“商品軟件”)就是由商業公司在調研大多數行業用戶的需求上開發的軟件,該軟件基本上能滿足這些用戶的需求,而且它的功能不會因個別或少數用戶的要求而改動。隨著互聯網的興起和軟件授權銷售方式的普及,商品軟件的銷售可軟件公司直銷、代理銷售、專業下載網站銷售等多種渠道,軟件授權許可的銷售模式往往是根據使用商品軟件的用戶數和安裝該軟件的計算機數來收取許可費用。項目軟件 就是軟件公司專門為某個客戶開發的軟件系統,該系統由委托開發的客戶配合調研需求,“量體裁衣”,在關鍵階段雙方可派技術人員互相“滲透”,密切合作,共同完成系統的開發和實施以及運行。項目軟件與外包軟件的操作模式有相同性也有不同性。產品經理與項目經理

簡單地說,產品經理是做正確的事,其所領導的產品是否符合市場的需求,是否能給公司帶來利潤的。而項目經理是把事情做正確,把事情作得完美,在時間,成本和資源約束的條件下完成目標。項目經理要對某個產品進行開發的管理,負責開發的進度,開發過程中的協調等有關開發方面的問題,他最大的目標是時間第一、立項目標達成第一。并不會很尊重產品本身的市場需求以及業務邏輯的問題。

而產品經理是橫向管理的,也就是說他將負責某個產品或者某個產品線從商業計劃市場競爭開發需求推廣方案渠道策略等各個方面。產品經理一個產品線從頭到尾的重要參與人。

第三篇:RPG AS400程序員培訓手冊6

CL、CMD

其實有關這一章,以及屏幕文件的,在網上已經有很多人寫過了,想了想,還是說一下吧。

5.1 CL 程序

5.1.1 基本認識

簡單的理解,CL 程序就是和RPG 相對應的,是控制語言(Control Language)。類型為

CLP、CLLE 的源代碼編譯出來的程序,都屬于CL 程序。

可能還是不夠直觀,這么說吧,我們在交互式命令行上輸入的命令,用程序的方式來執

行,這個執行的程序,就是CL 程序。

學過UNIX 的會比較好懂,CL 程序有點類似于SHELL,不過SHELL 是可以直接執行的,而且不用編譯;CL 程序需要編譯,而且要用CALL 的方式來執行。不過原理是接近的,都是在程序中直接調用命令行的語句。

所以說,CL 程序其實很好寫,只要會輸入命令,就可以寫CL 程序了。在編輯CL 程

序時,也可以用“命令 + F4”的方式來寫,不需要老老實實的整行輸入。

CL 程序不像RPGLE 程序,在編寫時,可以使用自由格式書寫;一行的內容如果太長

要,在最末尾處用“+”表示換行

舉個最簡單的例子,比如說新建個名為FHS01CL 的CLP 源程序,代碼如下:

PGM

WRKACTJOB

ENDPGM

編譯此程序,然后CALL 之,系統就會執行命令WRKACTJOB,查看當前的活動作業,效果與在交互式命令行下輸入WRKACTJOB 是一樣的。

當我們輸入F12,退出WRKACTJOB 時,系統就會繼續向下執行,發現是ENDPGM,表示程序結束了,于是判定執行完畢,退出至交互式畫面。

5.1.2 CL 程序的常用語法及命令:

一、程序的開始與結束:

PGM PARM(&A &B)/* 開始CL 程序 */

ENDPGM /* 結束CL 程序 */

CL 程序,和RPGLE 程序一樣,也可以有程序的入口參數,而且程序的入口參數

都是可傳遞的(也就是輸入的參數如果在程序中被修改過,那么原調用的程序中的相應

參數也會進行變化。不過CL 的入口參數只能為字符型,或數字型的單個字段,不能象

RPGLE 程序中那么多樣化(字段、結構、數組、指針)。

如果CL 程序沒有入口參數時,那么就可以不需要后面的PARM 語句,直接寫成PGM

即可。

寫CL 程序時,不妨多使用F4,看看系統的幫助,這樣就不用記那么多命令的參

數名。

二、變量及其定義

CL程序中的所有變量,都使用&做為前綴,這一點與RPGLE 程序不同。比如說

PGM PARM(&A &B)

就表示入口參數為A、B 這兩個變量

在CL 程序中使用到的變量,都必須使用DCL 語句來定義:

DCL VAR(&FLD01)TYPE(*CHAR)LEN(10)

DCL VAR(&FLD02)TYPE(*DEC)LEN(10 2)

上述語句表示:

定義變量FLD01,10 位長的字符型變量

定義變量FLD02,10 長,其中2 位小數的數字型變量

除了字符、數字之外,CL 程序還可以定義邏輯變量(*LGL),邏輯變量允許的值只

能為’1’或’0’。不過通常有字符與數字也就夠了。CL 程序的主要功能在于進行命令處理,而不是處理字符串以及數據庫

三、CL 常用命令:

CHGVAR--變量賦值

CHGVAR VAR(&FLD01)VALUE(‘ABCD’)

即是將變量FLD01 賦值成為’ABCD’(左對齊),同理,VALUE 的括號中也可

以填寫一個變量,即表示將此變量的值賦值到變量FLD01 中。

數字型變量的賦值同樣也是使用CHGVAR 語句。

當變量中只包含數字時(0—9),數字型變量與字符型變量可以使用CHGVAR

語句進行轉換,這一點與RPGLE 中的MOVE 語句比較類似。

IF--條件判斷語句

IF COND(&FLD01 *EQ '1')THEN(CHGVAR VAR(&FLD02)+

VALUE('0'))

當變量FLD01 等于’1’時,將變量FLD02 中的值更改為’0’

THEN 后面,即是當符合條件時,要執行的命令。寫起來其實沒有看上去那么

復雜,多用F4 就會發現CL 程序寫簡單。

就比如上例,先寫IF,然后按F4,在Condition 處填寫條件語句,然后在

Command 處填上CHGVAR,再按F4,再去填相應的處理語句,這樣寫,就比直

接把整句抄下來就簡單多了。

上面這種寫法,只能在符合條件時,執行一條CL 語句;如果要執行多條,就

必須寫做:

IF COND(&FLD01 *EQ '1')THEN(DO)

CHGVAR VAR(&FLD02)VALUE(‘0’)

其它執行語句

ENDDO 也就是THEN 后面,用DO,表示接下來的語句都是在這個IF 條件成立時才

執行(DO)的。

然后結束處用ENDDO,必須要有。ENDDO 在這里和循環沒有任何關系,表

示的是ENDIF 的意思,但是CL 語句里沒有ENDIF,只有ENDDO。

IF 語句中,表示判斷的關鍵字與RPGLE 中的Ifxx 操作碼類似,有

*EQ *GT *LT *GE *LE *NE

用來表示邏輯關系的關鍵字有

*AND, *OR, *NOT

GOTO--跳轉語句

GOTO 語句與RPGLE 中的GOTO 是一樣的,都是跳轉的意思。

FHSTAG:

GOTO CMDLBL(FHSTAG)

注意,這里定義標簽是用“:” 冒號

MONMSG--監控錯誤信息

我們使用CL 語句時,執行的命令可能會報出一些異常錯誤,從而導致整個程

序中斷,需要手工干預。MONMSG 命令可以監控我們預定的錯誤信息,使CL 程

序正常的向下運行。舉例而言,如果CL 程序中有如下語句:

CALL PGM(FHS01R)

MONMSG MSGID(CPF4131)

則表示當系統調用程序FHS01R 時,如果發現有CPF4131(聲明的文件重新編

譯過,但程序未重新編譯)的錯,那么CL 程序將不會異常中斷,僅僅只是不運行

程序FHS01R,然后繼續向下執行CL 程序

MONMSG 還可以用于在監控到錯誤信息之后,進行處理,如下:

CALL PGM(FHS01R)MONMSG MSGID(CPF4131)EXEC(CHGVAR VAR(&FLD01)+

VALUE('0'))

這句話就表示當發現有CPF4131 的錯誤之時,將變量FLD01 賦值成為’0’

如果要執行多句的話,和IF 語句的方法類似,也是使用DO 與ENDDO

MONMSG MSGID(CPF4131)EXEC(DO)

CHGVAR VAR(&FLD01)VALUE(‘0’)

其它處理語句

ENDDO

5.1.3 不常用的語法

%SST--取字符串

CHGVAR VAR(&FLD01)VALUE(%SST(&FLD02 3 1))

表示將字符變量FLD02,從第3 位開始,取1 位,左對齊賦值到變量FLD01 中。

%SST 的括號的參數中,第一個參數必須為字符型變量,第二個參數表示起始位,第三個參數表示要截取的長度。

*CAT--拼字符串

DCL VAR(&FLD01)TYPE(*CHAR)LEN(10)

CHGVAR VAR(&FLD01)VALUE('A' *CAT 'B')

即表示將10 位長的字符型變量賦值成為’AB ‘

‘A’,‘B’,也可以使用變量,如

CHGVAR VAR(&FLD01)VALUE(&FLD02 *CAT &FLD03)

要注意,*CAT 不能去掉字符串末尾的空,從效果上來看,有點類似于RPGLE 中的EVAL 操作碼,而不是CAT 操作碼

+、-、*、/--數學運算

數字型變量,可以進行數學運算 CHGVAR VAR(&FLD01)VALUE(&FLD01 + &FLD02)

即等同于RPGLE 程序中的 EVAL FLD01 = FLD01 + FLD0

2同理,-、*、/ 分別對應減、乘、除

不過數學運行常用于RPGLE 程序中,較少用在CL 控制里面,這里只是介紹一下。

讀取文件:(From Cuer:P1421)

DCL VAR(&FLD01)TYPE(*CHAR)LEN(2)

DCLF FILE(FHSLIB/PFFHS)

RCVF

CHGVAR VAR(&FLD01)VALUE(&FHS01)

以上這段CL 的意思,就是在CL 程序中讀取PFFHS 文件,然后將讀到的第一條記

錄賦值到CL 的臨時變量FLD01 中。

如果要將一個文件從頭讀到尾,則可以用如下語句來實現:

DCLF FILE(FHSLIB/PFFHS)

LOOP:

RCVF

MONMSG MSGID(CPF0864)EXEC(GOTO CMDLBL(EXIT))

讀取到每條記錄后的處理語句

GOTO CMDLBL(LOOP)

EXIT:

也就是說,信息CPF0864,即表示未讀取到記錄。

在CL 程序中聲明文件使用DCLF 語句,一個CL 文件中只能聲明一個文件,聲明

語句必須在CL 控制語句之前。

使用聲明的文件中的字段,同樣需要在字段名前加上“&” ;

CL 程序中,無法控制游標,無法對記錄進行定位操作。所以CL 程序對文件的操 作是比較弱的,通常我最多只用來讀取某些只含少量記錄的參數文件。

5.2 CMD

CMD 是用來生成命令的,執行后可以像其它系統命令一樣,直接輸入命令,或是F4,不需要像CLP 一樣,要CALL 一下。

其實CMD 本質上也是執行CLP 或RPGLE(在編譯時指定),用起來,無非就是好看點,直接一些,除此之外的意義,似乎也就沒什么了。

舉個例子,比如我們查看一個文件中的內容時,可以使用SQL 來查看,也可以使用命

令RUNQRY 命令來實現(RUNQRY QRYFILE(文件名))。但在我們要頻繁查看文件

時,這兩種方式似乎都不是很爽,也就是說要輸入的內容都不是最少的,那我們可以設計一

個CMD,譬如說叫SEE,希望實現的最終效果,是在命令行輸入“SEE 文件名”,就

可以查看PF 文件中的記錄。那么,我們按如下步驟來實現:

1.建立一個CLP 程序,比如叫SEECLP,代碼如下

PGM PARM(&FILENAME)

RUNQRY QRYFILE(&FILENAME)

ENDPGM

2.編譯此程序

3.建立一個CMD 程序(即源代碼的屬性為CMD),代碼如下:

CMD PROMPT(' 顯示文件記錄 ')

PARM KWD(NAME)TYPE(*CHAR)LEN(10)MIN(1)+

CHOICE(' 顯示文件記錄內容 ')+

PROMPT('Display file record')

4.編譯此CMD,用F4,可見如下畫面:

Create Command(CRTCMD)

Type choices, press Enter.Command............> SEE Name

Library...........> FHSLIB Name, *CURLIB

Program to process command...> SEE Name, *REXX

Library...........> *LIBL Name, *LIBL, *CURLIB

Source file..........> FHSFILE Name

Library...........> FHSLIB Name, *LIBL, *CURLIB

Source member.........> SEE Name, *CMD

Threadsafe...........*NO *YES, *NO, *COND

其中,藍色字體顯示的,就是我們需要輸入這個CMD 要調用的程序名(默認值與

CMD同名),這里我們將此項內容填為SEECLP,表示SEE 這個CMD,調用的是SEECLP

這個程序

5.編譯成功之后,我們在命令行執行“SEE 文件名”,就可以看到指定文件的記錄。也可以用SEE + F4 的方式來使用

6.要注意,CMD 中,PARM 表示的就是CMD 命令的參數,參數的個數、類型、長

度都必須與其調用的程序相匹配,但名稱可以與其調用的程序中的參數名稱不一

樣,而且名稱前面不能有“&”字符。

7.在PARM 參數中,MIN(1),表示該項參數必須有值(即最小的有效長度為1),當

參數無值時,將會自動出現SEE + F4 的效果,同時該項參數高亮顯示。試一試

就知道了

第四篇:程序員入門進階手冊

這篇文章,我主要是讓你成為更為專業的入門程序員。請注意,此時,你可能需要讀一些比較枯燥的書,但我想說,這些是非常非常重要的。你一定要堅持住。

編程技能

在系統地學習編程技能之前,我希望你能先看一下 “ The Key To Accelerating Your Coding Skills”,這篇文章會告訴你如何有效地快速提高自己的編程能力。然后接下來是下面幾大塊內容,但還只是入門級的。

編程技巧方面這個階段,你可以開始了解一下 Java 語言了,我個人覺得 Java 是世界上目前為止綜合排名最好的語言。你一定要學好這門語言。推薦《Java 核心技術(卷 1)》,除了讓你了解 Java 的語法,它還會讓你了解面向對象編程是個什么概念(如果你覺得這本書有點深,那么,你可以降低難度看更為基礎的《Head First Java》)。然后,既然開始學習Java 了,那就一定要學 Spring,推薦看看《Spring in Action》或是直接從最新的 Spring Boot 開始,推薦看看《Spring Boot 實戰》。關于 Spring 的這兩本書,里面可能會有很多你從來沒有聽說過的東西,比如,IoC 和 AOP 之類的東西,能看懂多少就看懂多少,沒事兒。?

操作系統。這里你可以看看《鳥哥的 Linux 私房菜》,這本書會讓你對計算機和操作系統,以及 Linux 有一個非常全面的了解,并能夠管理或是操作好一個 Linux 系統。當然,這本書有很多比較專業的知識,你可能會看不懂,沒關系,就暫時略過就好了。這本書的確并不適合初學者,你能看多少就看多少吧。

? 網絡協議你需要系統地了解一下數據庫設計中的那些東西,這里推薦慕課網的一個在線課程--“數據庫設計的那些事”。每個小課程不過 5-6 分鐘,全部不到 2 個小時,我相信你一定能跟下來。你需要搞清楚數據的那幾個范式,還有 SQL 語句的一些用法。當然,你還要學習和使用一下數據庫,這里推薦學習開源的 MySQL。你可以看官方文檔,也可以看一下這本書《MySQL 必知必會》。? 前端方面在你處理中文時有時會發現有亂碼出現,此時需要了解 ASCII 和 Unicode 這樣的字符編碼。這里推薦一篇文章Character encoding。還有 Github 上的這兩個 Awesome 倉庫:Awesome Unicode 和 Awesome Code Points。?

為什么轉成 Java 語言?

相信你可能會問,為什么之前學習的 Python 和 JavaScript 不接著學,而是直接切到 Java 語言上來,這樣會不會切得太快了。這是一個好問題,這里需要說明一下,為什么我會切到 Java 這個語言上來,主要是有以下幾方面考慮。1.Java 是所有語言里面綜合實力最強的,這也是為什么幾乎所有大型的互聯網或是分布式架構基本上都是 Java 技術棧。所以,這是一個工業級的編程語言(Python 和 JavaScript 還達不到這樣的水準)。

2.之所以,沒有用 Java 來做入門語言而是用了 Python,這是因為編程是一件比較費腦子的事,一開始學習時,興趣的培養很重要。Python 比較簡單,容易上手,能夠比較容易地提起興趣,而用 Java 則可能比較難。3.在你有了一些編程語言的基礎后,有了一些代碼的邏輯后,切到工業級的編程語言上來,更為專業地學習編程,是非常有幫助的。像 Python 和 JavaScript 這樣的動態語言用著是很爽,但是,只有像 C、C++ 和 Java 這樣的靜態語言才可以讓你真正地進階。

4.對于一個合格的程序員,掌握幾門語言是非常正常的事情。一方面,這會讓你對不同的語言進行比較,讓你有更多的思考。另一方面,這也是一種學習能力的培養,會讓你對于未來的新技術學習得更快。很多時候,一些程序員只在自己熟悉的技術而不是合適的技術上工作,這其實并不好,這會讓你的視野受限,而視野會決定你的高度。綜上所述,這就是在入門的時候我故意讓你多學幾門語言的原因。

編程工具

編程工具方面,你需要開始學習使用下面這些工具了。

? 編程的 IDE。傳統一點的,你可以使用 Eclipse。當然,我推薦你使用 Intellij IDEA。這兩個工具都可以開發各種語言,但是主要用在 Java。如果你想玩得更時髦一些的話,使用 Visual Studio Code 也不錯,這個工具潛力十足,用其開發 Python、JavaScript、Java、Go、C 和 C++ 都能得心應手(教程-本文發布時還基本沒怎么翻譯完)。

? 版本管理工具。版本管理工具是非常重要的編程工具。傳統的有 P4、SVN、CVS 等,但都會被 Git 取代,所以,你就只用學習Git 就好了。學習Git 的教程網上有很多,這里我推薦非常系統的 Pro Git 第二版(如 果你覺得 Pro Git 比較枯燥的話,備選猴子都能懂的 Git 入門),然后你要學會使用 GitHub。關于一些 Git 環境安裝和準備以及 GitHub 使用,你可以自行 Google(比如:這篇Github and Git 圖文教程 或是這篇Git 圖文教程及詳解)。

? 調試前端程序。你需要學會使用 Chrome 調試前端程序,Google 一下會有很多文章,你可以看看 超完整的 Chrome 瀏覽器客戶端調試大全。? 數據庫設計工具。你需要學會使用 MySQL WorkBench,這個工具很容易使用。相關的手冊,你可以看一下官方文檔。

實踐項目

這回我們需要設計一個投票系統的項目。業務上的需求如下:

? ? ? ? ? 用戶只有在登錄后,才可以生成投票表單。投票項可以單選,可以多選。

其它用戶投票后顯示當前投票結果(但是不能刷票)。投票有相應的時間,頁面上需要出現倒計時。

投票結果需要用不同顏色不同長度的橫條,并顯示百分比和人數。

技術上的需求如下:

這回要用 Java Spring Boot 來實現了,然后,后端不返回任何的 HTML,只返回 JSon 數據給前端。

? 由前端的 JQuery 來處理并操作相關的 HTML 動態生成在前端展示的頁面。

? 前端的頁面還要是響應式的,也就是可以在手機端和電腦端有不同的呈現。這個可以用 Bootstrap 來完成。?

如果你有興趣,還可以挑戰以下這些功能。

在微信中,通過微信授權后記錄用戶信息,以防止刷票。? 可以不用刷頁面,就可以動態地看到投票結果的變化。

? Google 一些畫圖表的 JavaScript 庫,然后把圖片表得風騷一些。?

小結 上面那些書和知識你要看完,還要能理解并掌握,我估計你最少也要花 1-2 年左右的時間。如果你能夠走到這里,把前面的那些知識都了解了,不用精通,能獨立地做出上面的那些實踐項目,那么,你就算是真正的入門了。

而且,你已經是一個 “ 全棧工程師 ” 的樣子了,在這里我要給你一個大大的贊。如果這個時候,你對編程還有很大的熱情,那么我要恭喜你了,你可能會是一個非常不錯的程序員。加油啊!

上面的那些技術已經算是比較專業的了。如果你已經大致掌握了,我相信你可以找到至少年薪 20 萬以上的工作了,而且你的知識面算是有不錯的廣度了。但是深度還不夠,這個時候,是一個比較關鍵點了。

你可能已經沉醉在沾沾自喜的驕傲的情緒中,那么你也可以就此止步,加入一些公司,在那里按部就班地完成一些功能性的開發,成為一個搬磚的碼農。你也可以開始選擇一個方向開始深入。

我給你的建議是選擇一個方向開始深入。因為你并不知道你未來會有多大的可能性,也不知道你會成為什么樣的人,所以為什么不再更努力一把呢?

后面,我們就開始非常專業的程序員之路了。這也是一般程序員和高級程序員的分水嶺了,能不能過去就看你的了。

第五篇:RPG AS400程序員培訓手冊9

其它

8.1 報表打印

在這里,簡單說一下報表。其實據說RPG 設計之初,主要就是為了解決報表問題。不

過發展到現在,在我接觸過的系統中,覺得報表在RPG 編程之中反而退居其次,大部分程

序都是對數據庫中磁盤文件(即PF 文件)的操作。

報表文件其實在某種意義上與普通的磁盤文件很類似,都是有記錄格式(Record

Format),都可以進行寫操作(WRITE),RPGLE 的程序對它們的操作方式也比較雷同。所

不同的是普通的磁盤文件的數據是存儲在數據庫中,而報表文件WRITE 了之后,是以脫機

文件(Spool File)的形式存在。所以在一個庫中,磁盤文件具有唯一性,即不能有同名的磁盤文件;而在同一個輸出隊列中,同名的報表文件(即生成的脫機文件),允許有多個。

要做一個全新的報表打印,大致上可以分為畫報表文件(PRTF),與編寫打印程序這兩

部分。

一、畫報表文件(PRTF)

1、新建立一個屬性為PRTF的文件,然后使用19 進入報表編輯狀態。(即STRRLU)

2、定義一個新的記錄格式(Record Format):DR + F18 + F10,注意看下方的功能

鍵說明

3、在一個記錄格式之下,追加內容時,要在新的編輯行前加“CLC”,表示此行的內容,是屬于上面記錄格式的。

4、編輯行前加:

DC: 定義常量

CF: 使當前行的內容居中

5、常用功能鍵:

F13:

標記 / 取消標記(光標所指的字段)。多試一下就知道使用方法,可以將 同一行的多個相連的字段標記成為一個塊(對首尾兩個字段操作F13 即可)。

高亮部分表示已被標記的塊。

F14:

將已標記的塊COPY 到光標指定處。(其實這個我用得不多)

F15:

將已標記的塊MOVE 到光標指定處。(這個用得不少)

F16:

刪除已標記的塊。(這個用的頻率也不少)

F11:

定義新變量

F23:

進入當前字段的功能菜單畫面

6、對新變量的定義,按F11 之后,見到畫面如下:

Edited length............: 1

Record format............: RCD00

1Number of keywords.........: 0

Number of indicators........: 0

Type choices, press Enter.Field................FLD001 Name

Option indicators..........01-99, N01-N99

More indicators..........N Y=Yes, N=No

Starting line............1-255

Starting position..........6 1-255, +nn

Length of data...........1 1-378, +nn,-nn 翻頁,還有:

Data type..............1 1=Character

2=Zoned

3=Floating point

4=Open

5=Graphic

6=Date

7=Time

8=Time stamp

Decimal positions..........0-31, +n,-n

Reference a field..........N Y=Yes, N=No

Use referenced values.......Y Y=Yes, N=No

可以采用直接定義長度、類型的方法,即在第1 頁的最末尾,Length of data 處,填上字段長度;如果是字符型,就不需要再填其它內容;如果是數字型,在第2 頁Decimal

positions 處填上小數位數。

也可以采用參照字段的方法(即參照已存在的PF 文件中的字段)。如果選用這種

方法,就用需要在Length of data 以及Decimal positions 中填寫內容,將Reference a

field 項填為“Y”,然后按確認鍵(好象F10 鍵也可以),然后可以看到該項高亮顯示。

此時再按F10,可進入該字段的功能菜單(也可以通過在報表編輯狀態下,直接在當前

字段處按F23 進入):

Opt Keyword Opt Keyword Opt Keyword

ALIAS DFT IGCCHRRTT

BARCODE DLTEDT INDTXT

BLKFOLD EDTCDE MSGCON CDEFNT EDTWRD PAGNBR

CHRID FLTFIXDEC PRTQLTY

CHRSIZ FLTPCN REFFLD

COLOR FNTCHRSET SKIPA

CPI FONT SKIPB

CVTDTA HIGHLIGHT SPACEA

DATE IGCALTTYP SPACEB

DATFMT IGCANKCNV TEXT

DATSEP IGCCDEFNT TIME

以上菜單中,標記為藍色的,是我常用的幾個選項。

在這些選項前面,選2,即是對當前字段加注這些功能;選4,即是去掉這些

功能。

要參照已知字段定義變量,則在“REFFLD”選項前選2,可見

Field...............Record format..........File...............Library.............*CURLIB

各選項的含義:

Field: 當前變量所參照的字段

Record Format: 當前變量所參照字段,在PF 文件中所屬的記錄格式

File: PF文件名

Library: PF 文件所在的庫名

7、其它幾個常用功能選項的含義:

SKIPA:Skip After,在WRITE 操作時,寫該字段后,自動換頁; SKIPB:Skip Before 在WRITE 操作時,寫該字段前,自動換頁

SPACEA:Space After 寫該字段后,再打印一個空格;

SPACEB:Space Before 寫該字段前,打印一個空格(可用來解決錯行問題)

EDTCDE:定義當前字段的顯示方式,比如說當前字段為數字類型時,是否顯

示逗號,前面是補零等等。根據F1 鍵,看Help 中的說明:

Edit Code Description No Sign CR SignSign(L)

Commas and zero balances 1 A J N

Commas 2 B K O

Zero balances 3 C L P

No commas or zero balances 4 D M Q

User defined edit codes 5-9

Date field edit W

Date edit Y

Suppress leading zeros Z

二、編寫打印報表的程序

1.對報表文件的聲明:

FEF4322P O E PRINTER OFLIND(*IN99)

可以看到,操作方式是“O”,即只寫;

文件類型為“PRINTER”,即打印文件;

后面的OFLIND 關鍵字表示該報表文件的換頁指示器為99;即寫報表,當寫

滿一頁時,*IN99 自動變為1;然后報表自動換頁,*IN99 再自動變回0;

其實這一項我覺得控制起來有點不爽,所以我通常都是自行控制換頁,不用這

個指示器來判斷;我常使用的自行控制換頁的方法在下面會說明。

2.對報表文件的處理 和磁盤文件(DISK)一樣,報表文件其實也有OPEN,CLOSE,WRITE 的操

作。不過使用OPEN,CLOSE 操作時,不需要使用USROPN 關鍵字。同時也因為

生成的是脫機文件,所以不能進行CHAIN、UPDATE 等定位、修改的操作。

如果在程序中,只需要生成一份報表,那么可以不使用OPEN/CLOSE 操作,因為程序在運行之初,以及運行結束時,已默認打開,關閉了一次所有已聲明的文

件,包括報表打印文件。

但如果程序在運行時,需要生成多份報表,那么必須在每次生成報表前使用

OPEN 操作;在生成完報表后,使用CLOSE 操作,以保證脫機文件的完整。

在生成完當前報表前,還可能需要使用CHGPRTF 的命令,將報表生成到指定的輸出隊列中。如果不更改,那么報表會生成到當前用戶默認的脫機文件存放處。

當一個RPGLE 中,生成多份同名報表時,常會在生成報表前使用CHGPRTF,以

便于管理,避免混亂。

報表的操作,也與磁盤文件(普通PF 文件)類似,在OPEN 與CLOSE 之間,對各字段進行賦值,賦值完之后再通過“WRITE 記錄格式名” 的語句,來寫指

定的記錄格式。

3.自行控制換頁

在聲明報表時,可以通過OFLINE 關鍵字,定義換頁指示器,不過可能是換頁

指示器的使用方法我摸索得還不夠,所以使用起來總覺得不夠自如。

我通常是先在報表文件中,定義一個記錄格式(Record Format),該記錄格式下

只有一個字段,同時這個字段的功能選項處要標識為“SKIPA”,然后該字段盡量

做成不可見字符。在RPGLE 程序中,當程序運行邏輯上判斷需要換頁時,WRITE

這個記錄格式,就可以實現換頁了(也就是通過字段的SKIPA 選項來實現換頁,當然大家也可以使用其它更便捷的方法,這里只是介紹我常用的方法,因為我覺得

這個方法比較穩定)。至于如何判斷換頁,當然要看具體報表的需求是如何要求的。最重要的,是不

要忘記定義一個數字型變量用來統計當前頁已打印過的行數,當大于等于60 行,要進行換頁處理(我通常會留出幾行來做為冗余,大家可以自已選擇,但肯定不能

大于66 行,否則會自動換頁)

三、幾點補充

呵呵,找出我以前寫的關于報表打印的貼子,做為使用時補充

1、關于記錄格式

其實這個本來沒什么可說的,不過我就經常搞錯,還是說說吧。

同一個記錄格式之下,格式應該如下:

記錄格式名

0001.00+ 打印內容

0002.00+ 打印內容

0003.00+

每行要有這個+,才歸屬于同一個記錄格式。如果是個點的話,也就是說明這一行

并不屬于該記錄格式,如果想讓它屬于這個記錄格式,就要用CLC 命令;

當我們用19 編輯的時候,如果是3 來COPY 記錄行,系統經常會自動在COPY 處

新增一個記錄格式,所以要注意。(說來簡單,但是我最開始畫報表的時候,就曾經被

這個問題折磨)

2、關于變量的命名

不同的記錄格式,可以使用相同的變量名。

有的時候,為了少寫賦值語句,可以直接將變量命名得與PF 中的字段相同。

(不過我不太喜歡這種做法)

如果在RPGLE 程序中,給某個變量賦值,但沒有對相應的記錄格式進行

WRITE 操作,編譯會不通過,報4030 字段未定義的錯。

3、關于打印時會錯行的問題

有的時候,打印會錯行,比如記錄格式定義

0001.00+ 變量A(比如說10 個字符長)

0002.00+ 變量B(比如說5 個字符長)

變量A 的起始處位于第一列

變量B 在變量A 的下一行,且起始處位于第三列

當變量A='AAAAAAAAAA',變量B='BBBBB'時,會打印出

AAAAAAAAAA

BBBBB

這很正常。

但當A=' A'或空時,本來我們是希望打印出:

A(或者這里就是一空行)

BBBBB

這樣的效果,但是系統就會打印成為

BBBBBA 或

BBBBB(沒有打印出空行)

也就是說,當某一行的前面為空時,(好象空格也算空)如果下一行有數據,就會

擠上來。解決辦法是在將A 字段的首位賦值為非空;如果想讓客戶看不見,可以考慮

使用漢字指示器。想打印空行,也可以用這個辦法。

又或者是將該字段的功能選項加上“SPACEB”,即打印前空一格,也可以解決這

個問題。(報表的這個特點困擾我最久)

4、關于報表的測試

其實這個東西最簡單,不過我以前一向很少去留意。

以前測試報表,尤其是測試換頁的時候,都是老老實實的用打印機去打,打出來了 再檢查換頁對不對,慢不說,還費紙。

其實我們進入到SPLF 里,查看剛生成的報表文件,右上角就有當前的頁數,行數,如第1 頁第1 行,右上角就是1/1,第2 頁第3 行,就是3/2,好象頁數在后面。

在“position to”這里,+1 就是下一行,W+1 就是向右移一列,慢慢+,就可以看

到換頁是否正確了。

8.2 SQLRPGLE

在RPG/RPGLE 程序中,也是可以使用SQL 命令的,首先,需要將程序的類型設置為

SQLRPG 或SQLRPGLE,SQL 語句的用法都一樣,RPG / RPGLE 是指非SQL 語句使用什

么格式。這類程序寫完之后與普通的RPG/RPGLE 程序一樣編譯,運行。

不過需要注意,SQLRPG 編譯時有一個“COMMIT”參數,此參數如果沒有使用

“*NONE”,或“*NC”,那么SQL 語句中更改的表將會由系統默認加一個COMMIT 聲明。

如果執行RPG 程序后沒有執行COMMIT 操作,那么當時數據是更改過來的,但當用戶

SIGNOFF 之后,SQL 更改的表數據將會回滾(這也是在維護階段常見的維護失誤之一)。

不過這個參數只會影響到SQL 語句中做了數據更改的表,不會影響到RPG/RPGLE 程序段

中的數據。

1、不帶任何參數的SQL:

C/EXEC SQL

C+ UPDATE PFFHS SET FHS01='0' WHERE FHS02=’1’

C/END-EXEC2、動態游標

C****************************** C* 定義動態SQL

C****************************** C/EXEC SQL C+ PREPARE W#SQL FROM :A C/END-EXEC C*

C****************************** C* 執行動態SQL,結果保存到游標C1 中

C******************************

C/EXEC SQL DECLARE C1 CURSOR FOR W#SQL C/END-EXEC C* C*

C****************************** C* 打開游標C1

C****************************** C/EXEC SQL C+ OPEN C1 C/END-EXEC C*

C****************************** C* 取數據

C****************************** C* SQLCOD DOUNE *ZERO C*

C/EXEC SQL

C+ FETCH C1 INTO :W#FLD1, C+ :W#FLD2, C+ :W#FLD3 C/END-EXEC C* C* ENDDO C*

C****************************** C* 關閉游標C1

C****************************** C/EXEC SQL C+ CLOSE C1 C/END-EXEC

8.3 SAVF,備份與恢復

SAVF,全稱SAVE FILE,存儲文件。可以將SAVF 視為一個存儲容器,它能夠將指定的庫,或指定的數據文件,或源代碼保存在其中,有點類似于UNIX 中的TAR。

SAVF 只用于備份與恢復。雖然通常這些事情是系統管理員做的,但是如果環境許可的情況下,開發人員能了解這些命令,自行做做備份,就可以更好地對程序進行測試、保護源

碼。當然,在使用RESTORE 命令時,一定要謹慎謹慎再謹慎,千萬不能追求操作速度,切

記切記。

1.建立SAVF

要使用SAVF,首先我們當然需要建立一個SAVF。如已有自己的SAVF,可跳過此步。

建立SAVF 的命令是:

CRTSAVF FILE(庫名/SAVF 名)

如果建立成功,就會在指定庫中,生成一個空的SAVF。2.清空SAVF

使用SAVF 前,必須保證SAVF 是空的。SAVF 不能追加內容。新生成的SAVF 一定的空的,不需要特別處理;

如果是已存在的SAVF,需要使用CLRSAVF 的命令,確保清空SAVF

CLRSAVF FILE(庫名/SAVF 名)

3.將指定的庫備份到SAVF 中

備份庫,使用下列命令來進行備份

SAVLIB LIB(要備份的庫名)DEV(*SAVF)SAVF(SAVF 所在庫名/SAVF 名)

ACCPTH(*YES)

ACCPTH(*YES),表示備份時,備份存儲路徑。也就是對應于數據文件,將其邏輯文件的相關信息也備份下來,會增加備份時間與備份空間;但恢復時,不需要對邏輯文件重新建

立索引,可以省很多時間。所以在備份數據文件建議加上這個參數。當然,如果是備份源代

碼,就不需要這個參數了。

4.恢復已備份的庫

RSTLIB SAVLIB(備份的庫名)DEV(*SAVF)SAVF(SAVF 所在的庫/SAVF 名)

RSTLIB(恢復的庫名)

RSTLIB 這個參數,表示恢復的庫名,其默認值等于“備份的庫名”。也就是說,如果

我將FHSLIB 整個庫備份下來,再使用RSTLIB 恢復,如果不更改RSTLIB 中的值,那么將

直接將FHSLIB 整個都覆蓋恢復;而如果指定RSTLIB 的值為OTHERLIB,那么將么把備

份的FHSLIB 的內容,覆蓋恢復到指定的OTHERLIB 庫中。

5.將指定的目標備份到SAVF 中

SAVOBJ OBJ(目標名)LIB(目標所在的庫)DEV(*SAVF)SAVF(SAVF 所在的庫

/SAVF 名)

一次可以備份多個目標。如果是備份源碼,那么OBJ 就表示源碼所在的SRCFILE,MEMBER 項就是源碼名。

可以使用F4 鍵,來備份更多的目標,或更多的源碼。

6.恢復目標

RSTOBJ OBJ(*ALL)SAVLIB(目標所在庫)DEV(*SAVF)SAVF(SAVF 所在庫名/SAVF 名)

RSTLIB(恢復的庫名)

與RSTLIB 類似。當然,OBJ 選項使用*ALL,表示恢復SAVF 中備份的所有的目標,也可以指定只恢復單個/多個目標。

8.4 菜單--MENU

如果有例子的話,做菜單其實也不復雜。我對菜單做得也不多,感覺對于一般開發

人員來說,使用頻率不是太高,還是簡單說一下吧

隨便找一個已存在的菜單,應該是包含DDS 與CMD 這兩種TYPE,COPY 一下;

然后用17,或19 進入DDS。

用19 進入時,可以像編輯報表一樣,對菜單進行編輯;

用17 進入時,在“Work with menu image and commands”選項中選擇“Y”,然后

用F10 可以看到自行定義的每條輸入項對應要運行的程序名,修改之;

用17 進入后,再退出時,系統會自動提示編譯菜單。

成功之后,查看屬性為“CMD”的源,會看到里面也有自定義的輸入項對應的要

運行程序名。

GO 菜單名,就可以進入生成的菜單。

8.5 實用命令

WRKACTJOB

這個使用的頻率應該是很高的吧,在這里只提一個用法:Coding 的時候斷線異常

退出時,再登錄之后,用2 進入剛才編輯的程序,會報錯“正在被使用”。除了等一會,一直等到它自動退出之外,還可以用WRKACTJOB + 10,來查找剛才自己的那個進程(顯示出來的命令應該是STRSEU),然后把它KILL 掉就行了。

DSPFD

DSPFD + PF 名,查看文件的信息,包括文件的MEMBER 數,總記錄數,被刪除的記錄數,CCSID 等等。

DSPFD + LF 名,查看邏輯文件的鍵值,結合DSPDBR,可以找出一個PF 文件對

應的所有LF 文件的鍵值。

DSPFD + 庫名 + *MBRLIST,可以看到該庫之下所有的文件名。

這個命令可以使用*OUTFILE,將輸出變成一個文件。

對于LF 文件,TYPE 項選擇“*ACCPTH”,可以看到該LF 文件的鍵值。如果把輸

入設定為OUTFILE,那么每條記錄指明了一個鍵值字段。

TYPE 項選擇“*SELECT”,可以把這個LF 文件的篩選條件列出來。

靈活運用此命令,將會是很多自行編寫的工具的基礎之一。

DSPFFD

注意,和上面的命令相差一個“F”,該命令表示查看PF 文件的字段信息。比如該

PF 文件共有多少個字段,每個字段的類型如何。

與DSPFD 相似,DSPFFD 也可以使用*OUTFILE,將輸出變成一個文件。每條記

錄標識一個字段。同理,靈活運用,也是眾多自行編寫工具的基礎。

MRGSRC

比較兩個程序的差異。按照A、B、A 的順序,MRGSRC 時,A 程序在上面,B 程

序在下面,白色的地方,即表示兩個程序的差異。

F13 表示接受當前差異,F17 表示接受所有差異,F16 表示繼續查找下一處差異。

在接受差異時,表示按照B 程序,更改A 程序。(即B 程序不變)

把SPLF 變成MEMBER(源文件)

必須知道SPLF 名,以及生成SPLF 的JOB、USR、NUMBER 名 CRTSRCPF FILE(庫名/SRCPF)RCDLEN(212)IGCDTA(*YES)

CHGPF FILE(庫名/SRCPF)CCSID(935)

CRTPF FILE(庫名/PF)RCDLEN(200)IGCDTA(*YES)

CPYSPLF FILE(SPLF 名)TOFILE(庫名/PF)+

JOB(NUMBER 名 / USER 名 / JOB 名)SPLNBR(*LAST)

CPYF FROMFILE(庫名/PF)TOFILE(庫名/SRCPF)+

TOMBR(MBR0001)MBROPT(*ADD)FMTOPT(*CVTSRC)

最后,SRCPF 下的MBR001 就是SPLF 轉成的MEMBER

當然,做為中間轉換的臨時文件,PF 文件會保留SPLF 的信息。

把MSGF 變成SPLF

CHGSYSLIBL LIB(QSYS2989)

DSPMSGD RANGE(*FIRST *LAST)MSGF(MSGF 所在庫名/MSGF 名)+

DETAIL(*BASIC)OUTPUT(*PRINT)

CHGSYSLIBL LIB(QSYS2989)OPTION(*REMOVE)

這個命令,再結合上面的“把SPLF 變成MEMBER”,就可以把MSGF 搞成

MEMBER,然后再FTP 到WINDOWS 上,就可以很方便地查找已定義的MSG 信息了。

不過必須要有權限執行CHGSYSLIBL 這個命令。

DSPOBJD

根據程序名,查找編譯時源代碼所在的庫名、SRCFILE 名。

DETAIL 參數用“*SERVICE”,OBJTYPE 選項用“*PGM”

不過好象RPGLE 的程序用這個命令查不出來,要用DSPPGM 命令。

DSPPGM

根據目標

DSPPGM + RPGLE 程序名,參數用“*MODULE”,然后再選擇5,就可以看到編 譯時RPGLE 程序時,源代碼所在的庫名,SRCFILE 名。

DSPDBR

根據物理文件查其對應的所有邏輯文件

DSPPGMREF

查找程序與PF、LF 的關系。

PGM 參數用“*ALL”,OUTPUT 參數用“*OUTFILE”,OBJTYPE 參數用“*ALL”,然后執行,再輸入輸出文件名與所在庫就可以了。然之后,就可以SQL 在這個生成的文件中查找(生成的過程可能會有點慢,要耐心)。

在生成的文件中,字段WHRFNM,表示記錄格式名。舉例來說,如果物理文件更

改過,那么物理文件與邏輯文件就都重新編譯過了,所以它們對應的的所有的程序都要

重新編譯,通常物理文件與邏輯文件使用相同的記錄格式名(當然,如果不同就算了)

這時就需要按記錄格式名來查找。比如SELECT * FROM 剛生成的文件 WHERE

WHRFNM = “記錄格式名”,找出所有涉及到這個記錄格式名的程序。

在生成的文件中,字段WHFNAM,表示文件名,包括物理文件與邏輯文件。比如

說當我們只修改了某個邏輯文件時,那么當然是只需要重新編譯與該邏輯文件有關的程

序,也就是說只根據文件名來查找就足夠了。

RTVCLSRC

如果編譯CL 程序時,不是刻意帶*NONE 參數,那么一般來說CL 程序都可以使

用這個命令來反編譯。具體用途試試便知

RGZPFM

重整文件,即回收已刪除記錄的空間。不過這個命令我沒實際用過。

WRKMSGQ QSYSOPR

顯示錯誤信息

CHGCMGDFT 更改某些命令的默認參數,如更改CRTPF 的WAITRCD 參數:

CHGCMDDFT CMD(QSYS/CRTPF)NEWDFT(‘WAITRCD(*IMMED)’)

SBMJOB

將任務提交后臺處理。

普通程序的流程中,如果A 程序CALL 了B 程序,那么A 程序必須等待B 程序運

行結束之后,才會繼續執行CALL 之后的語句;

如果是使用SBMJOB 的話,那么A 程序就將B 程序提交到后臺去運行,不等待B

程序結行完畢,直接繼續向下運行。

SBMJOB 命令僅僅只是表示將任務提交給后臺,所以此句運行完畢,也僅表示后

臺已開始運行,并不表示運行的程序結束。

Submit Job(SBMJOB)

Type choices, press Enter.Command to run...........Job name............*JOBD Name, *JOBD

Job description........*USRPRF Name, *USRPRF

Library...........Name, *LIBL, *CURLIB

Job queue...........*JOBD Name, *JOBD

Library...........Name, *LIBL, *CURLIB

如上所示,第一行Command to run 處,填寫需要提交后臺運行的命令語句(通常是CALL

某個程序);

Job name 表示的,是顯示在屏幕上的,運行的程序的名字,可以隨便寫,只是用來標識

用的;

Job description,填寫對應的JOBD(如果想將程序提交到指定的子系統下,那么此處 填寫子系統對應的JOBD,Job queue 處填寫子系統對應的JOBQ),如果不填,即表示默認

為當前用戶的JOBD,JOBQ

8.6 關于代碼風格的幾點想法

1、絕大多數情況下,不做硬性要求,一切都以維護時程序的易讀性為主導。

2、一定要在程序最開始,簡要說明程序實現的功能,輸入輸出參數,這個必須的。

3、臨時變量的命名:

這個應該算是最具有可規范性的了。總之最好就是一望之下,就知道這個臨時

變量是代表什么意思。變量名的長度可以不做局限,當然最好不要太長。通常項目

開發對此都會有明文或潛在的規范,多參照即可。

4、定義臨時變量的位置:

在首次使用該臨時變量前定義,同時加漢字注釋,簡單說明這個臨時變量在什

么情況下,應該賦什么樣的值。(當然了,如果是多個用途相似的臨時變量,可以

用一行注釋來搞定,不強求每個變量都要有一行注釋)

見過的大部分規范里面,都是統一在程序開始處定義一大堆臨時變量,規范的同時,總覺得用起來不夠方便,比如說不知道這個臨時變量什么時候使用,代表什

么意思,怎么使用,該怎么賦值等等。

5、子過程的使用:

主程序最好只寫主流程,將具體處理交給各子過程;同時在調用子過程之前,加注釋,說明這個子過程的處理功能。而子過程代碼最開始,也要有這個子過程的功能說明,最好詳細一點。

把子過程盡量寫成類似于CALL 程序的感覺,也就是自已定一個輸入輸出接

口。當然,這個并不是真的輸入輸出接口參數,因為子過程中的變量在整個程序中

都可以用到,只是說類似。比如說,某個字段,是子過程中需要使用到的關鍵的一

個字段,那我們就可以將其做為輸入字段,并在整個子過程的代碼中,盡量不要去 改它的值;再比如說,子過程的功能是計算出一個金額,那我們就可以把這個金額

字段做為輸出字段,在使用子過程之前將其清零。然后,在子過程前,加注釋說明

輸入輸出字段。

這樣做的意義在于:維護修改代碼的便利性,COPY 代碼的便利性。

6、視覺上的分隔:

RPGLE 的程序,寫出來都是一坨坨的,尤其是IF 語句,用多了的確很難分清

邏輯判斷到底是怎樣。我通常對代碼都是采用視覺上的分隔,因為我覺得這樣最直

觀。比如說,主代碼段與子過程段之間,用全行“*”來做分隔;各段之內,也用

長短不一的“*”來分隔,表示不同情況的處理,或表示當前是幾層之內的“IF”。

這個規律現在還沒有總結出數字化的東西來,大部分情況下還是憑感覺,以后有時

間做做統計看看。

總之最后的效果,是從視覺上,將不同的處理情況隔開。比如說

*****************

**注釋

C IF XXXX

C ENDIF

*****************

這種方式之下的ENDIF,就比較好找了吧。

“*”當然還可以再打得長一點,如果層次多了,還可以用單橫線,等號,諸

如此類。

7、注釋

注釋的重要性毋庸致疑,這里單指以下情況的注釋:

如果寫程序時,某些需求不是很明確,或自己對這個需求的理解不是很清晰,或者是用戶特意要求某種情況之下不按常規方式處理,又或者是處理判斷在邏輯上 比較復雜比較繞,那么不妨把自己當時的想法或客戶要求也寫在注釋中。事實上,有不少明顯的BUG,就是通過這種注釋發現的。__

下載RPG AS400程序員培訓手冊(大全五篇)word格式文檔
下載RPG AS400程序員培訓手冊(大全五篇).doc
將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
點此處下載文檔

文檔為doc格式


聲明:本文內容由互聯網用戶自發貢獻自行上傳,本網站不擁有所有權,未作人工編輯處理,也不承擔相關法律責任。如果您發現有涉嫌版權的內容,歡迎發送郵件至:645879355@qq.com 進行舉報,并提供相關證據,工作人員會在5個工作日內聯系你,一經查實,本站將立刻刪除涉嫌侵權內容。

相關范文推薦

    FastReport 4程序員手冊[全文5篇]

    FastReport 程序員手冊 一、使用TfrxReport 組件工作 1、加載并存儲報表 默認情況下,報表窗體同項目窗體構存儲在同一個DFM文件中。多數情況下,無須再操作,因而你就不必采用特......

    程序員培訓計劃

    程序員培訓計劃培訓目標: 了解xx公司的歷史和企業文化,規章制度等 了解xx公司產品主要應用和項目管理的基本知識掌握xx產品的基本業務流程 掌握xx技術開發的基本技能 培訓對象......

    培訓手冊

    成都燭龍科技有限公司 基層黨組織分類定級軟件支撐系統 培訓手冊 2012-5-10 1 準備工作.....................................................................................

    培訓手冊

    員工的必要培訓 一:確定培訓目標 1.服務技能培訓:培訓目標是幫助員工按照規范統一的服務準則為客戶提供各種服 務,提升員工與顧客之間的人際互動能力。培訓的內容主要是零售店......

    程序員內部培訓(合集五篇)

    1.前言 雖然題為培訓,但我還是想說一句,程序員其實不需要培訓,只需要指點。原因有三: 程序員的工作都必須去實踐,幾乎沒有純理論的領域。 由于互聯網的開放性,程序員能找到大量......

    屬地化培訓手冊

    輸電線路通道屬地化管理 培訓手冊 國網咸寧供電公司檢修分公司 二〇一四年三月 目 錄 一、屬地化工作概況 ………………………………………. 1 二、屬地化的目的及要求 …......

    家具培訓手冊

    一、皮革的種類及各種皮的主要區別和皮革常識 由于各行各業對皮革制品的工藝要求各不一樣,因此皮革種類繁多,對皮革稱謂也各不一樣,造成現在市場上對皮革稱謂混亂。 一般來說,我......

    駕駛員培訓手冊

    駕駛員培訓資料 親愛的用戶: 熱忱歡迎您購買和使用“朗晴”牌系列電動車! 廣州朗晴電動車有限公司是生產制造電動車的專業公司,專門從事各類電力驅動車輛的研制、設計、生產、......

主站蜘蛛池模板: 国产精品成人无码a片在线看| 精选国产av精选一区二区三区| 国产亚洲精品久久久久四川人| 亚洲欧美人成网站在线观看看| 日本一区二区三区免费播放| 狠狠久久噜噜熟女| 免费欧洲毛片a级视频老妇女| 欧美freesex黑人又粗又大| 精品少妇牲交视频大全| 午夜家庭影院| 日本xxxx色视频在线播放| 丰满人妻被黑人中出849| 国产精品久久久久秋霞鲁丝| 人妻熟女一区二区aⅴ林晓雪| 久久综合97丁香色香蕉| 人妻少妇久久中文字幕| 亚洲综合av色婷婷| 免费观看激色视频网站| 亚洲人亚洲精品成人网站| 人人妻人人做人人爽夜欢视频| 色与欲影视天天看综合网| 漂亮人妻熟睡中被公侵犯中文版| 日韩精品人妻2022无码中文字幕| 真人作爱免费视频| 99久久人妻精品免费一区| 国产三级三级三级av精品| 亚洲精品综合一区二区三区在线| 一区二区视频| 嫩草国产露脸精品国产软件| 亚洲 欧美 日韩 国产 丝袜| 亚洲午夜成人精品电影在线观看| 亚洲一区二区av在线观看| 久久综合伊人77777麻豆| 天堂а√在线地址在线| 少妇一夜三次一区二区| 国产精品午夜成人免费观看| 久久午夜福利无码1000合集| 秋霞av一区二区二三区| 欧美交换配乱吟粗大25p| 亚洲免费最大黄页网站| 熟妇五十路六十路息与子|