




已閱讀5頁,還剩33頁未讀, 繼續免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第九章 打印與格式化輸出,9.1 使用print函數,使用print函數可以將原始的末格式化的文本存入到文件,如果打印到屏幕以及幫助調試腳本,它的標準語法如下: Print FILEHANDLE list; 它的作用是將list中的數據打印到FILEHANDLE為文件句柄的文件中,還可以省略部份參數,寫為如下的形式:,Print FILEHANDLE; 表示將perl5內置變量$內容打印到FILEHANDLE Print list表示將數據打印到默認的文件句柄. Print:將內置變量$打印到默認的文件句柄,9.1.1設置默認文件句柄 Print函數一般使用默認文件句柄STDOUT,在perl5啟動時,會自動打開文件句柄STDOUT. 它的初始設置是計算機的顯示器,可以在程序中自定義STDOUT的設置,但一般采用select函數來改革者變默認的文件句柄,而不用改變STDOUT的設置. 語法如下: select (FILEHANDLE);,默認文件句柄是全局變量,所以在使用結束后,要注意使它恢復到原先的值,這可以通過使用動態作用域來實現,也可以讓子程序在使用全局變量時不會給其它程序帶來影響。,9.1.2 使用heredoc操作符 heredoc操作符,即表示here文檔,用于打印輸出當前的文件句柄,一般情況下,默認的文件句柄是STDOUT,它的語法如下: Print heredoc maker;,在后可以標明一個結束字符串,后面用此字符串來結束引號引起的文本,從當前行一直到結束字符串再次出現的中間所有行都同屬于這一個字符串。 結束字符串可以是一個標識符或者某些引號括起來的文本。,如果結束字符串用引號括起,所使用的引號的類型決定對整個字符串的處理,和正則表達式一樣,一個末加引號的標識符和用雙引號括起來是一樣的。 但在和標識符中間不能有空格,如果有的話,會被認為是空標志符。 而結束字符串必須單獨一行出現,不加引號且周圍沒有空格。,如: Print “eof”; Print eof; 都是可行的,這里語句中的分號不能省略。,9.2格式化輸出,用write函數和打印格式可以得到格式化輸出,write函數的語法和print函數的語法類似,如下: Write FILEHANDLE; 或 Write; 表達式中如果沒有句柄,則使用默認或選擇的句柄,文件句柄有相關聯的format語句,用于定義打印格式。,9.2.1 定義打印格式 定義打印格式的關鍵字為format,語法為: format formatname=lines_of_output; 以關鍵字format開始,后面是打印格式名formatname,它和一般變量的命名規則相同。,如果格式名和文件句柄同名,則用它作為該文件句柄的默認打印格式。如果格式名為文件句柄加上_TOP后綴,則用它作為該文件句柄的默認表頭格式(標題)。格式名后面是一個等號,格式聲明的第二部分是定義要打印到文件句柄的內容,第三部份是一個結束行,結束行僅為一個點號,不能再用任何其它符號。且點行必須在該行第一個字符。,9.2.2 顯示打印格式 利用一個簡單的write函數和適當的format語句,就可以向文件或屏幕發送大量的格式化數據,打印固定格式一般可以分成兩步: (1)將系統變量$_設成為所要使用的格式; (2)調用函數write.,例9-1 #!/usr/bin/perl $=“MYFORMAT“; write; format MYFORMAT= = 靜夜思 床前明月光, 疑是地上霜。 舉頭望明月, 低頭思故鄉。 = .,要特別注意,在最后一行的開頭不能少了點號,下面是程序的運行結果。,9.2.3格式輸出變量 使用打印格式的主要目的是格式化存儲在簡單變量或數變量中的值從而生成可讀性好的輸出,這可以用“值域”來實現,每個值域指定一個值,調用write函數就可以用值域指定的格式來顯示 。,1.通用的打印格式 打印格式的一個缺點是定義中包含了變量名,如: format MYFORMAT= = The number is ! $number = .,例9.2 格式輸出變量 #!/usr/bin/perl %agehash=( “Birdy“=21, “Alian“=18, “Gaole“=25, “Feng“=23, “Marilin“=20, “zoruo“=35 ); $=“WRITEHEADER_TOP“; write; $=“WRITEHEADER“; write;,$count=0; foreach $name(sort keys(%agehash) format WRITEHEADER_TOP= Name Age = . format WRITELETTER= $name,$age . format WRITEHEADER= * .,2.格式名 例9.2中將格式命名為文件句柄名,就可以把這種格式和文件句柄相關聯。 表頭格式在每個新數據頁面打印,表頭格式通過在文件句柄后加上關鍵字_TOP來定義并與文件句柄關聯(表頭格式關聯有考慮大小寫,一定要用_TOP).,在例9.2中, 要注意一下,定義時的形式,有時兩個是同名的情況下,要注意區分,如: $=“WRITEHEADER_TOP“; write; $=“WRITEHEADER“; write; 這兩句都是輸出表頭,利用不同的格式名去賦值,可以實現區別的效果。,3.定義值域格式 值域的定義格式也可以有多種,一種是直接定義好格式,如: format WRITEHEADER_TOP= Name Age = .,另一種是定義變量在其中的對齊方式,然后再確定從哪列開始打印后面變量和為每個變量分配多少個輸出字符,用到的符號是和號,對于大多數格式化工作,每個對齊字段以號開頭,而號告訴重復與該號相關聯的變量,變量應出現在位置行的每個號及其它字符所定義的位置上。,如: format WRITELETTER= $name,$age . format WRITEHEADER= * .,這里,每個值域的第一行字符是行填充符,當使用字符時,不做文本格式化。 除了多行值域符號*外,域寬都等于其指定的包含符號在內的字符個數。 如: #.# 表示共有7位的寬度,小數點前4個,小數點后2個。,9.2.4 特殊變量格式化 我們可以把格式變量與文件句柄相連,為了應用的方便,perl也允許使用特殊變量來進行文件句柄的關聯。 在perl中,有一個模塊叫English.pm,在程序的頭部加上“use English”這個代碼,就可以在程序中使用別名了。,9.2.5 輸出文件 默認的,write函數將結果輸出到標準輸出文件STDOUT,也可以使它將結果輸出到任意其它的文件中。最簡單的辦法是把文件句柄作為參數傳遞給write函數,如下所示: write (MYFILE); write函數就用默認名為MYFILE的打印格式輸出到文件MYFILE中,但這樣就不能用$變量來改變所使用的打印格式,系統變量$只對默認文件句柄起作用。,可以先改變默認文件句柄,然后改變$,再調用write函數,如: select (MYFILE); $=“MYFORMST”; write;,用select函數改變默認文件句柄時,它返回當前默認文件句柄的內部表示,這樣就可以創建子程序,按自己的想法輸出,又不影響程序的其它部份,如下面的程序段: sub write_to_stdout local$savefile,$saveformat; $savefile=select(STDOUT); $saveformat=$; $=“MYFORMAT”; write; $=$saveformat; select($savefile); ,在輸出到打印機時,可以每頁頂部輸出相應的信息,這些特殊文本稱為頁眉。定義頁眉實際上就是定義名為filename_TOP的打印格式,如: format STDOUT_TOP= consolidated widgets inc.1004 Annual Report,對word熟悉的同學應該知道,頁眉中常見的一個值就是當前的頁碼,在perl里,它是存在系統變量$%中的。 如: format STDOUT_TOP= page $% .,也可以通過改變系統$改變定義頁眉的打印格式名,與$一樣,$只對當前默認文件起作用,可以和select函數結合使用。 默認情況下,每頁長度為60行,但可以通過對$=的改變來改變頁長 如: $=66; 意思是頁長($=)為66頁。,9.2.6 處理長字符串 在使用format語句時,每行數據都設置為特定長度,這樣可以使所有的數據行和列對齊,如果要處理長信息,就要在格式行中使用 或* 值域*雖然可以輸出多行文本,但它只是將字符原樣輸出,不加以格式化。,在perl中對長字符串(包含換行)進行格式化的值域定義很簡單,只需把打頭的換成即可。這種文本格式化中,perl解釋器在一行中將放置盡可能多的單詞。 每當輸出一行文本,被輸出的子串就從變量中刪除,再次在值域中使用該變量就把剩下的字符串繼續按格式輸出。當內容全部輸出完后,這個變量就成了空串,就會輸出一個空行,有時
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年足球裁判員考試內容歸納試題及答案
- 農業發展對植保員提出的新要求試題及答案
- 2024年籃球賽事新規對裁判員的影響試題及答案
- 亮點分析 2024年體育經紀人考試的試題及答案
- 2024年模具設計師資格考試動力探析試題及答案
- 農業植保員資格考試常見問題試題及答案
- 電業安全規程課件
- 提升自我的模具設計師資格考試試題及答案
- 織造智能項目可行性研究報告(參考范文)
- 2024年備考秘笈裁判員試題及答案
- 人工智能概論課件完整版
- 渣土、余土運輸服務方案(技術方案)
- 《早產兒第一年:從NICU到家庭照護完全指南》隨筆
- 四川省成都市2024年小升初英語試卷(含答案)
- 2024ABB電機與發電機業務單元產品手冊
- 2024自動導引車AGV技術規范
- 2024-2030年中國菊芋菊粉行業市場發展趨勢與前景展望戰略分析報告
- (完整版)柴油發電機施工方案
- 【正版授權】 IEC 60268-5:2003/AMD1:2007 EN-FR Amendment 1 - Sound system equipment - Part 5: Loudspeakers
- 醫院培訓課件:《血管超聲在通路中的應用》
- 2024年職業技能測試題庫500道附答案【黃金題型】
評論
0/150
提交評論