clist command list_第1頁(yè)
clist command list_第2頁(yè)
clist command list_第3頁(yè)
clist command list_第4頁(yè)
clist command list_第5頁(yè)
已閱讀5頁(yè),還剩114頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、clist (command list)clist (command list) by大連理工大學(xué)軟件學(xué)院clist學(xué)習(xí)小組 clist (command list) clist簡(jiǎn)介 clist的創(chuàng)建、編輯、執(zhí)行 clist的語(yǔ)法規(guī)則 clist的符號(hào)變量 clist的控制變量 clist的內(nèi)置函數(shù) clist的程序結(jié)構(gòu) clist和終端用戶的交互 clist終端的i/o語(yǔ)句 writing attn and error routines clist (command list)第一講:clist簡(jiǎn)介 clist是什么 clist語(yǔ)言是一種解釋型語(yǔ)言。和其他高級(jí)解釋型語(yǔ)言編寫(xiě)的程序類(lèi)似,cli

2、st程序也易于編寫(xiě)和測(cè)試。您不必編譯或者鏈接編輯它們。要測(cè)試一個(gè)clist程序,您只需要簡(jiǎn)單地執(zhí)行它并更正任何可能產(chǎn)生的錯(cuò)誤,直至程序運(yùn)行不再產(chǎn)生錯(cuò)誤。 clist和rexx語(yǔ)言是tso/e上可用的兩種命令語(yǔ)言。clist語(yǔ)言能使您更加高效地使用tso/e工作。 術(shù)語(yǔ)clist(讀作”see list”)代表命令序列;之所以這樣叫是因?yàn)榇蠖鄶?shù)基本clist程序都是tso/e命令序列。當(dāng)您調(diào)用一個(gè)這樣的clist程序時(shí),它按順序執(zhí)行tso/e命令。 clist的作用 執(zhí)行日常例行任務(wù) 作為結(jié)構(gòu)化應(yīng)用程序 管理其他語(yǔ)言編寫(xiě)的應(yīng)用程序 編寫(xiě)ispf應(yīng)用程序 執(zhí)行日常例行任務(wù)執(zhí)行日常例行任務(wù) 作為ts

3、o/e的使用者,可能會(huì)定期執(zhí)行某些任務(wù)。這些任務(wù)包括輸入tso/e命令并檢查數(shù)據(jù)集狀態(tài)、為特定的程序分配數(shù)據(jù)集或者打印文件等等。通過(guò)編寫(xiě)相應(yīng)的clist程序,可以顯著減少在這些日常的例行任務(wù)上所花費(fèi)的時(shí)間。通過(guò)將執(zhí)行任務(wù)所需要的所有指令集合到一個(gè)clist程序中,可以節(jié)約時(shí)間以及減少任務(wù)執(zhí)行中的錯(cuò)誤,提升工作效率。一個(gè)clist程序可以由單純的tso/e命令組成,也可以由tso/e命令與clist語(yǔ)句所混合組成。 示例顯示數(shù)據(jù)集相關(guān)信息:tso/e中結(jié)果: 作為結(jié)構(gòu)化應(yīng)用程序作為結(jié)構(gòu)化應(yīng)用程序 clist語(yǔ)言包括了編寫(xiě)一個(gè)完整的、結(jié)構(gòu)化應(yīng)用程序的基本工具。任何clist都可以調(diào)用另外的clis

4、t程序,這被稱為“嵌套的”clist程序。clist同樣包含了獨(dú)立的子程序,稱為“子過(guò)程”。嵌套clist程序和子過(guò)程能夠?qū)list程序劃分成邏輯單元,并將公共功能在某處實(shí)現(xiàn)。專(zhuān)門(mén)的clist語(yǔ)句能夠: 為子過(guò)程或者嵌套clist程序定義公共數(shù)據(jù)。 將數(shù)據(jù)限制在特定子過(guò)程或者clist程序中。 將特定的數(shù)據(jù)傳給子過(guò)程或者嵌套clist程序。對(duì)于交互式應(yīng)用程序,clist可以發(fā)出ispf命令顯示全屏面板。反之,ispf面板也可以根據(jù)用戶在面板上的輸入,來(lái)調(diào)用clist程序。 示例調(diào)用test1中的clist程序:執(zhí)行結(jié)果: 管理其他語(yǔ)言編寫(xiě)的應(yīng)用程序管理其他語(yǔ)言編寫(xiě)的應(yīng)用程序 假設(shè)需要訪問(wèn)用其

5、他語(yǔ)言編寫(xiě)的應(yīng)用程序,但這些應(yīng)用程序的相關(guān)接口可能不易使用或記憶。比重新編寫(xiě)一個(gè)新的應(yīng)用程序更好的方法,是編寫(xiě)具有相應(yīng)接口的clist程序,方便用戶調(diào)用。一個(gè)clist程序可從終端上收發(fā)消息以確定用戶需要做什么?;诖?,clist程序可以建立環(huán)境,發(fā)出需要的命令來(lái)調(diào)用程序,執(zhí)行所請(qǐng)求的任務(wù)。 示例調(diào)用cobol程序:tso/e中結(jié)果: clist (command list)第二講:clist的創(chuàng)建、編輯、執(zhí)行clist data set and library clist數(shù)據(jù)集可以是順序數(shù)據(jù)集,也可以是分區(qū)數(shù)據(jù)集,順序clist數(shù)據(jù)集就是一個(gè)clist,而pds可以包含一個(gè)或多個(gè)clist。

6、 在pds,每個(gè)clist成員都有一個(gè)獨(dú)特的成員名。當(dāng)一個(gè)pds完全由clist組成時(shí),它被稱為clist library clist library使clists易于維護(hù)和執(zhí)行。創(chuàng)建系統(tǒng)中常用的clist library,便于調(diào)用,提高效率。如果你分配一個(gè)clist數(shù)據(jù)集到庫(kù)文件sysproc里,或指定庫(kù)altlib命令, 就可以通過(guò)只鍵入clist library中的成員名對(duì)其進(jìn)行隱式調(diào)用,調(diào)用起來(lái)更方便 創(chuàng)建和編輯clist數(shù)據(jù)集1.using options 3 and 2 of ispf/pdf2.using the tso/e edit command and its subcom

7、mand in the option 6 of ispf/pdf data set attributes 各參數(shù)在缺省的情況下取值如下: 變長(zhǎng)記錄格式(如果你指定一個(gè)編輯命令行值,固定長(zhǎng)度的記錄格式的數(shù)據(jù)集將會(huì)在指定的長(zhǎng)度)。 一個(gè)邏輯記錄255個(gè)字符的大小 3120字節(jié)的塊大小 所有輸入數(shù)據(jù)和修改數(shù)據(jù)轉(zhuǎn)換為大寫(xiě)字符 edit command創(chuàng)建數(shù)據(jù)集各參數(shù)缺省值如圖 執(zhí)行 clist的語(yǔ)法(顯式調(diào)用) if a clist, listpgm, is a member of a pds named prefix.clistlib.clist, enter: exec clistlib(list

8、pgm) clist ex if a clist, listpgm, is a member of a pds named prefix.clist, enter: exec (listpgm) clist ex if the clist is in a sequential data set named prefix.listpgm.clist,enter: exec (listpgm) clist ex if the clist is in a sequential data set named prefix.listpgm, enter: exec prefix.listpgm clis

9、t ex 執(zhí)行 clist(顯式調(diào)用) tso/e 環(huán)境 : ispf 6 環(huán)境 : ispf 非6環(huán)境 : 執(zhí)行 clist(顯式調(diào)用) 在存放clist數(shù)據(jù)集成員名左側(cè)敲ex命令: 將clist放在jcl中,使用ikjeft01調(diào)用clist程序: 執(zhí)行 clist(隱式調(diào)用)1. 使用altlib命令對(duì)clist程序進(jìn)行隱式調(diào)用: 例如:調(diào)用st001.test.clist中的成員test4 顯式調(diào)用:exec st001.test(test4) 注:如上的顯示執(zhí)行,數(shù)據(jù)集名字必須以clist結(jié)尾 隱式調(diào)用: test4 執(zhí)行 clist(隱式調(diào)用)2.以常用1.9版本的虛擬機(jī)為例,將自

10、己clist庫(kù)存放在adcd.z19.proclib的dbsproc8成員中:隱式調(diào)用時(shí)就可以“直呼其名”: clist (command list)第三講:clist的語(yǔ)法規(guī)則 clist statement categories clist的語(yǔ)法規(guī)則clist語(yǔ)句的語(yǔ)法規(guī)則相對(duì)于tso / e的命令而言clist statement與操作數(shù)之間或者相互獨(dú)立的操作數(shù)之間的一個(gè)或多個(gè)空格,逗號(hào)或制表符“-”表示在不忽略下一行前所有空格的情況下續(xù)行,“+”表示忽略下一行前面的空格進(jìn)行續(xù)行。all clist statement 必須大寫(xiě)clist statement的最大長(zhǎng)度是32756字節(jié)。空

11、格或者空行不影響clist程序處理注釋?zhuān)?(1)一行本身 (2)之前,在中間的,或經(jīng)過(guò)clist語(yǔ)句或tso / e命令。 example: (1)/*get return code */ set rc = &lastcc (2)alloc file(in) da(accounts.data) shr /* input data set operators and expressionsfor the functionfor the functionarithmeticadditionsubtractionmultiplicationdivisionexponentiationrema

12、inderprioritization the order ofevaluation+*/* /() comparativeequalnot equalless thangreater thanless than or equalnot greater thannot less than=,eq=,ne,gt=,ge,ng,nllogicalandorand,&or,| clist的語(yǔ)法規(guī)則 order of evaluations 1. exponentiation remainder(求冪求余) 2. multiplication, division 3. addition, su

13、btraction 4. comparative operators 5. logical and 6. logical or valid numeric ranges the values of numeric variables must be integers in the range from -2,147,483,647 (-231+1) to +2,147,483,647 (+231-1).a clist terminates and issues an error message in the following situations:(1) you explicitly cod

14、e a value outside the valid range.(2) the evaluation of an expression produces an intermediate or final value outside the valid range. clist (command list)第四講:clist的符號(hào)變量 定義規(guī)則 首字符可以是大小寫(xiě)字母,下劃線,#,$,。 除首字符外的字符還可以是0-9。 變量長(zhǎng)度最大可以為252(不包括&符號(hào))。 不能和clist操作符重名(ne,eq等)。 如果 變量需要在ispf上使用,長(zhǎng)度不能超過(guò)8。 不能用聲明或關(guān)鍵字作變量

15、名字。 三種定義及賦值方法 set read proc 使用set定義符號(hào)變量1.直接定義變量并賦值(可以賦字符串,數(shù)值,空值)直接定義變量并賦值(可以賦字符串,數(shù)值,空值)2.將其他變量的值賦給此變將其他變量的值賦給此變量量 使用read定義符號(hào)變量p.s 類(lèi)似于cobol中的accept c語(yǔ)言中的printf()執(zhí)行:讀入用戶輸入的字符并把它賦給變量讀入用戶輸入的字符并把它賦給變量 使用proc定義符號(hào)變量proc: 定義符號(hào)變量并且從用戶或系統(tǒng)傳遞給clist的參數(shù)得到值定義規(guī)則: proc count 位置參數(shù) 關(guān)鍵字參數(shù)(value)count: 表示有多少個(gè)位置參數(shù)跟隨其后,如果

16、沒(méi)有位置參數(shù),則填0。關(guān)鍵字參數(shù)(value):參數(shù)之間用空格分開(kāi)。 使用proc給符號(hào)變量賦值位置參數(shù):name address關(guān)鍵字參數(shù):state() zip()執(zhí)行結(jié)果:執(zhí)行結(jié)果: clist (command list)第五講:clist的控制變量 clist的控制變量 控制變量不需要用戶自定義 控制變量提供了mvs,tso/e的一些信息,比如說(shuō)軟件的信息,當(dāng)前時(shí)間和日期等。 clist的控制變量用戶相關(guān)的:&sysuid:得到用戶id;&syspref:取當(dāng)前數(shù)據(jù)集的前綴;&sysproc: 1.當(dāng)被前臺(tái)調(diào)用,提供當(dāng)前登陸過(guò)程的id; 2.當(dāng)被批次調(diào)用(當(dāng)作

17、業(yè)被提交時(shí)),取啟動(dòng)程序的id; 3.當(dāng)clist從一個(gè)已經(jīng)開(kāi)始的作業(yè)被調(diào)用時(shí),取作業(yè)的id 示例執(zhí)行結(jié)果: clist的控制變量取系統(tǒng)當(dāng)前日期:1.&sysdate &syssdate &sysjdate(1).&sysdate :月/日/年(2).&syssdate:年/月/日(3).&sysjdate:年 當(dāng)前天數(shù)2.&sys4date &sys4sdate &sys4jdate: 年份顯示四位比如2013/12/06系統(tǒng)相關(guān)的: 示例執(zhí)行結(jié)果: clist的控制變量獲得返回碼和原因代碼:&lastcc:在最

18、后一條tso命令執(zhí)行結(jié)束后,發(fā)揮的條件碼(非錯(cuò)為零)&maxcc:返回條件碼的最大值 clist的控制變量查看與clist有關(guān)的信息:&sysenv:看clist是在前臺(tái)還是后臺(tái)運(yùn)行。&sysscan:定義clist每行符號(hào)替換的最大次數(shù),范圍0-231-1。&sysicmd:隱式調(diào)用clist時(shí),顯示proc的名字 顯式調(diào)用時(shí),顯示值為空&syspcmd:用戶最近最常使用的tso命令。&sysscmd:用戶最近最常使用的tso的子命令。&sysnest:clist是否嵌套(被另一個(gè)clist調(diào)用) yes:正在被調(diào)用;no:clist處

19、于最外層,未被調(diào)用。 clist的控制變量與終端有關(guān)的:&systermid:取終端的id;&syslterm :屏幕顯示多少行;&syswterm:屏幕寬度。 示例執(zhí)行結(jié)果: clist (command list)第六講:clist的內(nèi)置函數(shù) clist的內(nèi)置函數(shù) &datatype返回表達(dá)式的數(shù)據(jù)類(lèi)型返回表達(dá)式的數(shù)據(jù)類(lèi)型char - 表達(dá)式的值包括至少一個(gè)非數(shù)值型ebcdic(ibm推出的一種編碼方式)字符并且沒(méi)有雙字節(jié)字符集中的字符num - 表達(dá)式完全是數(shù)值型。dbcs - 表達(dá)式由雙字節(jié)數(shù)據(jù)組成的字符串mixed - 表達(dá)式同時(shí)包括 dbcs和ebc

20、dic數(shù)據(jù). 示例set a = &datatype(alphabet) /* result: &a = charset b = &datatype(1234) /* result: &b = numset c = &datatype(sys1;proclib) /* result: &c = charset d = &datatype(3*2/4) /* result: &d = numset e = &datatype(12.34) /* result: &e = char &length 和 &

21、;sysclength&length:計(jì)算字符串長(zhǎng)度:計(jì)算字符串長(zhǎng)度:set a = &length() /* result: &a = 6set a = &length(100) /* result:&a = 3忽略算術(shù)運(yùn)算:set lenanswr = &length(&str(1+1+9)result:&lenanser=5;包含前導(dǎo)零和空格:set slngth= &length(&str(&ifield)&ifield =0 472.20,結(jié)果:&slngth=8.&sys

22、clength:只計(jì)算字符串里面字母的個(gè)數(shù):只計(jì)算字符串里面字母的個(gè)數(shù):例:set a = &sysclength() /* result: &a = 2set a = &sysclength(abc) /* result: &a = 5 &eval計(jì)算內(nèi)部值計(jì)算內(nèi)部值例:write &fnum + &snum = &eval(&fnum+&snum)給 &fnum ,&snum 分別賦值4和3, 輸出結(jié)果:4 + 3 = 7 &str 和 &nrstrwrite &str(

23、9) 9write &nrstr(9) 9set a = 10write &str(&a) 10write &nrstr(&a) 10set b = 11write &str(&b) &bwrite &nrstr(&b) &b白皮書(shū)上例子:set c = &str(cset d = text&str(&c)write &d text( &sysindex定位一個(gè)字符串在另一個(gè)字符串中的位置定位一個(gè)字符串在另一個(gè)字符串中的位置格式:格式:&sysindex(st

24、ring_1,string_2,start)start:從string_2第幾個(gè)字符開(kāi)始找,缺省是1.結(jié)果為3, 0, 0 clist (command list)第七講:clist的程序結(jié)構(gòu) making selections 選擇結(jié)構(gòu)the standard format: if condition then +do.action endelse +action 注:then必須與if在同一個(gè)邏輯行內(nèi),如果寫(xiě)不下,要給出續(xù)行標(biāo)志(+/-),else語(yǔ)句遵循同樣的規(guī)則。 making selections 選擇結(jié)構(gòu)example: if &print=yes then +do wri

25、te printing the data set as you requestedendelse +write the data set will not be printed. making selections 選擇結(jié)構(gòu)the null else format: if condition then +do.(action) .endelse /*可寫(xiě)可不寫(xiě)*/null else format:選擇結(jié)構(gòu)中的else缺省action語(yǔ)句或 者缺省整個(gè)else making selections 選擇結(jié)構(gòu)the null then format: if &print=no thenels

26、e +do.(the rest of the clist, which prints the data set) .end making selections 選擇結(jié)構(gòu)nesting if-then-else sequences:if condition1 then +doaction1 /* do if condition 1 is trueendelse +if condition2 then +doaction2 /* do if condition1 is false andend /* condition2 is trueelse +doaction3 /* do if condit

27、ion1 and condition2end /* are both false making selections 選擇結(jié)構(gòu)the select statement: select test expressionwhen expression1 .(action) .when expression2when expression3otherwise .(action) .end making selections 選擇結(jié)構(gòu)select statement example:顯示 loops 循環(huán)結(jié)構(gòu) the do-while-end sequence:do while condition .(

28、action) .end 當(dāng)while后的條件為真時(shí),循環(huán)體執(zhí)行;否則不執(zhí)行 loops 循環(huán)結(jié)構(gòu)the do-until-end sequence:do until condition .(action) .end 循環(huán)至少執(zhí)行一次,直到until后的條件為真時(shí)循環(huán)結(jié)束 loops 循環(huán)結(jié)構(gòu) do until &input = yes write type yes if you are finished read &input; end the do until sequence is useful for requesting input from a user. beca

29、use the decision is made after the input is received, the loop can continue or end depending on the value of the input.example: loops 循環(huán)結(jié)構(gòu)the iterative do sequence: do variable = from_expression to to_expression +by by_expression .(action) .end loops 循環(huán)結(jié)構(gòu)do &count = 1 to 10 /* default by, increa

30、se &count by one /* each time through the loop . end and a clist would execute the following loop five times;do &count = 1 to 10 by 2 /* increase &count by two /* each time through the loop . end the from, to, and by expressions can all contain clist variables:do &count = &min to

31、 &max by &increment . endexample loops 循環(huán)結(jié)構(gòu)compound do sequences do variable = from_exp to to_exp by by_exp + while condition1 + until condition2 + . (action) . endnesting loops do &i = 0 to 9 do &j = 0 to 9 %proc&i&j end end混合do語(yǔ)句,可以讓我們一次規(guī)定多個(gè)循環(huán)判斷條件。 calling a subprocedure 調(diào)用

32、子例程example: abc: proc 0 set a = apples syscall xyz &a a hehe end xyz: proc 3 p1 p2 p3 write &p1 &p2 &p3 end 顯示 apples a hehe*利用syscall語(yǔ)句調(diào)用子過(guò)程時(shí),在syscall語(yǔ)句中寫(xiě)明要調(diào)用的subprocedure和要傳遞的參數(shù)和參數(shù)名。包括數(shù)據(jù)字符串,變量值或變量名等都可以作為傳遞參數(shù)! calling a subprocedure 調(diào)用子例程 如果需要向subprocedure中傳遞的參數(shù)中含有空格時(shí)需要syscall語(yǔ)句中使用&

33、amp;str,實(shí)例如下: set &a = john al syscall xyz &str(a) /* pass variable to xyz xyz: proc 1 parm/* subprocedure xyz write &parm result: john al * calling a subprocedure 調(diào)用子例程 當(dāng)syscall語(yǔ)句傳遞了一個(gè)缺省&的變量名,可以用sysref語(yǔ)句對(duì)此變量進(jìn)行重新定義,并覆蓋原值。set &a = alsyscall xyz a /* pass var. &a to xyz, omitti

34、ng the &*/;if &lastcc = 0 then +write &a xyz: proc 1 &parm1sysref &parm1 /* refer changes to the caller */set &parm1 = georgereturn code(0)endresult: george*sysref statement sharing variables among subprocedures variables shared among different clists are called global variab

35、les. global variables are defined using the global statementvariables shared by subprocedures in one clist are called nglobal (named global) variables. you define named global variables with the nglobal statement.區(qū)別:l nglobal variables不能共享于多個(gè)clist;l nglobal variables只能通過(guò)名字定義;l nglobal variables只需要定義

36、一次。 using the global statementin proc1: global a b c din proc2: global x y zin proc3: global f g h kin proc4: global qin proc5: global r s.the same clist can be invoked at two or more levels of a nested hierarchybecause each invocation of a nested clist causes a new copy of it to be broughtinto stor

37、age. for example, proc2 and proc4 could both invoke proc5!variables &a, &x, &f, &q, and &r can be shared by all the clists. if proc4 sets&q equal to d, then &a, &x, &f, and &r are also set equal to d.嵌套clists: using the nglobal statementabc: proc 0 /* in subpr

38、ocedure abc,nglobal a,b,c /* define nglobal variablesset a = applesset b = bananasset c = cantaloupsyscall xyz /* call subprocedure xyzendxyz: proc 0 /* in subprocedure xyz,write mix &a, &b, and &c /* use the nglobal variablesend顯示 goto statements it can only branch to labels in the same

39、 subproceduregoto statements cannot branch: to another clist to a subprocedures proc statement from one subprocedure to another from a subprocedure to the clists main procedureexample:set c=3 l1: set c=&c-1 if &c eq 0 then goto l2 write c=&c goto l1l2: end example 上機(jī)練習(xí)參考在一個(gè)clist程序中插入jcl語(yǔ)

40、句并提交! allocating a data set with nglobal allocating a data set with nglobalresult: clist (command list)第八講:clist和終端用戶的交互 communicate with the terminal userways for communicating prompting the user for input(提示用戶輸入) writing messages to the user(向用戶發(fā)消息) receiving replies from the user(從用戶收到回復(fù)) using i

41、spf panels (使用ispf面板) prompting the user for inputa clist can prompt for input by: using a proc statement with positional or keyword parameters on the first line of the clist using tso/e commands prompting with the proc statement when you include positional parameters on a proc statement at the begi

42、nning of a clist, the clist user must supply a value for each of them. if the user does not specify a value at execution, the clist prompts until the user specifies a value.example: prompting with tso/e commands clist程序里面可以加入tso/e命令,而有些命令是提示用戶進(jìn)行輸入的。但是這些在clist程序里面的命令只有本clist程序允許提示時(shí)才能發(fā)揮提示作用。 clist程序能否

43、允許提示是通過(guò)tso/e命令 profile 和exec以及clist語(yǔ)句 control 和control variable &sysprompt進(jìn)行控制的. prompting with tso/e commandsset &sysprompt = on = control prompt set &sysprompt = off = control noprompt.lprofile prompt is the default specification and applies to a tso/e session,not to a particular clist

44、lexec noprompt is the default specification and applies only to the clistthat it invokes.lthe control statement applies only to the clist in which it appears. prompting with tso/e commands writing messages to the user 可以使用write或writenr或兩者同時(shí)使用,用來(lái)向用戶發(fā)送消息。writewritenr同時(shí)使用 receiving replies from the use

45、r read和readdval語(yǔ)句提供兩種方式供clist從終端接收用戶輸入 read語(yǔ)句直接從終端接收輸入信息,通常放在write和writenr語(yǔ)句之前 readdval語(yǔ)句從&sysdval中獲取輸入信息read receiving replies from the user&sysdval control variablereaddvalreaddval語(yǔ)句默認(rèn)將空格和逗號(hào)視為分隔符! using ispf panels clist可以通過(guò)ispf面板與終端進(jìn)行交互。 用戶可以通過(guò)ispf對(duì)clist程序進(jìn)行調(diào)用;clist程序也可以使用ispf面板里面的選擇和條目。

46、l clists use the ispexec command to display ispf panels ps:了解即可,詳情參見(jiàn)ibm紅皮書(shū)tso clist clist (command list)第九講:clist終端的i/o語(yǔ)句clists can perform i/o to a physical sequential data set, amember of a partitioned data set (pds), or the terminalwhen allocated to a file. four clist statements areavailable for

47、opening, reading, writing, and closing files:openfile opens a previously allocated file for input, output, or updating. you may have allocated the file using the tso/e allocate command or using step allocation (jcl statements in a logon procedure).getfile reads a record from a file opened in the sam

48、e clist.putfile writes a record to a file opened in the same clist.closfile closes a file opened in the same clist.whenever clists are nested,corresponding openfile,getfile,putfile,and closfile statements must be in the same clist. introduction example 運(yùn)行結(jié)果 first of all:allocate 無(wú)論想要使用openfile、getfi

49、le、putfile還是closefile,首要的是為此數(shù)據(jù)集分配一個(gè)文件名字用來(lái)read、write和update,格式: allocate(filename) da(dsn) shr set fileid=filenameallocate(&fileid) da(dsn) shr(也可以為分區(qū)數(shù)據(jù)集的成員分配文件名,即:da(dsn(mem) opening a file openfile聲明的語(yǔ)法:openfile filename input /* to read records from the file output /* to write records to the f

50、ile update /* to update records in the file(openfile命令一般是緊跟在allocate之后的,無(wú)論進(jìn)行g(shù)etfile、putfile和closefile,都需要先openfile,格式: allocate(filename) da(dsn) shropenfile filename set fileid=filenameallocate(&fileid) da(dsn) shropenfile &fileid) opening a file however, do not use openfilestatements to op

51、en more than onemember of a pds for output at the sametime.(同時(shí),盡量不要用fileid=filename這種形式來(lái)分配文件和打開(kāi)文件,原因在以后會(huì)講解到) reading a record from a file 在clist中,運(yùn)用getfile來(lái)讀數(shù)據(jù)。當(dāng)一個(gè)文件被分配且使用getfile操作后,系統(tǒng)會(huì)生成一個(gè)與此文件名相同的變量來(lái)從數(shù)據(jù)集讀取數(shù)據(jù)。 在clist中,數(shù)據(jù)的讀取是按照存儲(chǔ)的順序進(jìn)行的,每次讀取一行,所以一般設(shè)置一個(gè)變量來(lái)控制讀取的次數(shù),以此來(lái)達(dá)到需要的讀取數(shù)據(jù)數(shù)量。 reading a record from a

52、 fileallocate file(paycheks) da(d58tan1.checks.data) shr reuopenfile paycheks /* defaults to input */set counter=1do while &counter 3getfile paycheks /* read a record */set counter=&counter+1 /* increase counter by one */endclosfile paycheks /* close the file */此程序不返回任何實(shí)質(zhì)性內(nèi)容 = =、如果使用getfile從

53、一個(gè)終端上讀取記錄,此記錄會(huì)轉(zhuǎn)化為大寫(xiě)的形式,并且此終端用戶最好在數(shù)據(jù)的最后寫(xiě)一個(gè)clist的終結(jié)符,防止讀取數(shù)超過(guò)文件行數(shù)時(shí)報(bào)錯(cuò)。 writing a record to a file 首先,write與read不同的是,write在openfile處必須寫(xiě)成:openfile filename output而read中 openfile filename (input)其中input可以省略。 其次,前邊提到盡量少用fileid=filename這種形式,因?yàn)槿缡褂眠@種,則必須給fileid實(shí)時(shí)定義變量,即:openfile &fileid output set &file

54、id = $2590.00 putfile &fileid writing a record to a file反例結(jié)果?write &fileid ?write &fileid ? writing a record to a file 與read一樣,write文件時(shí)也是依次按順序?qū)懭耄看螌?xiě)入一行。 對(duì)于一個(gè)數(shù)據(jù)集不同的disposition來(lái)說(shuō): new,old,shr 當(dāng)關(guān)閉了這個(gè)file并重新打開(kāi)它時(shí),putfile命令會(huì)從數(shù)據(jù)集的第一行開(kāi)始寫(xiě)入并覆蓋其中的原有數(shù)據(jù); mod 當(dāng)關(guān)閉了這個(gè)file并重新打開(kāi)它時(shí),putfile命令會(huì)從數(shù)據(jù)集的末尾開(kāi)始按順序?qū)懭?/p>

55、 writing a record to a fileallocate file(salaries) da(d58tan1.curntsal.data) shr reuopenfile salaries output /* open the file for output */set counter=1do while &counter = 3set salaries=. /* set the record to be written */putfile salaries /* write the record */set counter=&counter+1 endclosf

56、ile salaries /* close the file */這個(gè)文件也是通過(guò)設(shè)置salaries中的值來(lái)往數(shù)據(jù)集里添加數(shù)據(jù)的。 updating a file 更新一個(gè)數(shù)據(jù)集,其實(shí)就是先讀取它其中的內(nèi)容,把想要更新的部分挑選出來(lái),再用寫(xiě)入的方法將其內(nèi)容修改,所以getfile和putfile不可缺少。.(error routine) .allocate file(paycheks) da(d58tan1.checks.data) shr reuopenfile paycheks update /* open file for updating */getfile paycheks /*

57、read first record */do while &substr(4:7,&paycheks) ne refygetfile paycheks /* read another record */endset paycheks = 000refy /* set new value */putfile paycheks /* write new value to data set */closfile paycheks /* close the file */ example問(wèn):若此文件再運(yùn)行一遍,結(jié)果會(huì)是什么? closing a file 通過(guò)上述程序,毫無(wú)疑問(wèn),在每個(gè)

58、clist中,如果你有openfile,則一定有closefile,如果你是以openfile &fileld形式打開(kāi)的文件,則要一closefile &field的形式關(guān)閉文件。 如果有openfile而沒(méi)有closefile,則在你重新登陸之后,將不能再次處理執(zhí)行這個(gè)文件。 注意:closefile命令在clist中沒(méi)有e,即closfile. clist (command list)第十講:writing attn and error routines introduction attn routines 和 error routines 是嵌入在clist文件中的兩種異

59、常處理機(jī)制的程序塊。主要用于當(dāng)clist運(yùn)行當(dāng)中出現(xiàn)問(wèn)題時(shí),自動(dòng)或手動(dòng)進(jìn)行操控程序結(jié)束或正常繼續(xù)運(yùn)行。 writing error routines 對(duì)于error routines來(lái)說(shuō),更多的運(yùn)用在錯(cuò)誤處理,包括: pre-allocation errors end-of-file condition allocation errorserror routines的結(jié)構(gòu):error +do.(action) .end 這段程序塊應(yīng)該寫(xiě)在程序的開(kāi)始部分,而想要運(yùn)行的主程序在后邊,即接在end后邊。 當(dāng)運(yùn)行這個(gè)clist時(shí),先運(yùn)行主程序部分,如果出現(xiàn)error,則跳回到error routines程序塊進(jìn)行運(yùn)行處理。 example example writing attn routines 對(duì)于attn routines來(lái)說(shuō),更多的運(yùn)用在異常處理,包括死循環(huán)等。 attn routines的結(jié)構(gòu):attn +do.(

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論