Perl-17—檔案操作函數

來源:互聯網
上載者:User

一、開啟檔案:

$OpenFileFlag  =  open(FILEHANDLE,"模式標識符 FileName");

如果開啟成功,則返回真值(非空值);如果開啟失敗,則返回假值(空值);檔案的預設訪問模式是唯讀;

1、使用open函數進行檔案重新導向:

$OpenFlag  =  open(HFCAT,"cat file* |");

則open函數先把cat命令的輸出構造成一個檔案,然後與檔案控制代碼變數HFCAT關聯起來;

$OpenFlag1  =  open(FH1,"> FileName");

$OpenFlag2  =  open(FH2,">&  FH1");

這兩行語句的功能是把檔案控制代碼FH1和HF2都關聯到檔案FileName上,兩個檔案控制代碼都向同一個檔案中寫入資料;

其中第二條語句中的參數">& FH1"告訴Perl解譯器使用已經開啟的並與檔案控制代碼FH1關聯的檔案,即:檔案控制代碼FH1和FH2都指向與FH1相關聯的檔案;

二、關閉檔案:

關閉檔案使用函數close();如果關閉的檔案是管道檔案,即重新導向的命令時,程式會等待重新導向命令執行結束;

close(FILEHANDLE);

三、print、printf和write函數:

這三個函數都是輸出函數;其中print是最簡單的函數;

1、print   ("Hello,Perl World/n"); 

     輸出到當前預設的檔案中(由select()函數選擇),沒有調用select()時,預設的輸出檔案是標準輸出STDOUT;

2、print   OUTFILE  ("Hello,Perl World/n") ;

     把資料輸出到指定檔案控制代碼OUTFILE所指向的檔案中;

3、printf  ($FORMATSTRING,arg1,arg2,...,argN);

     先格式化資料,然後把格式化後的資料寫到預設檔案中(由select()函數選擇),沒有調用select()時,預設的輸出

     檔案是標準輸出STDOUT;

4、printf  OUTFILE  ($FORMATSTRING,arg1,arg2,...,argN);

     先格式化資料,然後把資料輸出到指定檔案控制代碼OUTFILE所指向的檔案中;

5、write  ($FORMATSTRING,arg1,arg2,...,argN);

     先格式化資料,然後把格式化後的資料寫到預設檔案中(由select()函數選擇),沒有調用select()時,預設的輸出

     檔案是標準輸出STDOUT;

6、write  OUTFILE  ($FORMATSTRING,arg1,arg2,...,argN);

     先格式化資料,然後把資料輸出到指定檔案控制代碼OUTFILE所指向的檔案中;

7、select()函數:

      select(FILEHANDLE);

      這個函數把參數FILEHANDLE所指定的檔案控制代碼設定為當前新的預設檔案;當對print、printf和write函數的調用

      未指定檔案時,預設就寫入到檔案控制代碼FILEHANDLE所指向的檔案中;

8、eof()函數:

      eof函數判斷最後一次讀檔案操作是否是檔案的最後一個記錄(檢查檔案讀寫位置指標是否已經到達檔案尾部),

      如果是,則返回非零值(真),如果不是,否則返回零值(假);也就是說,最後一次讀取檔案時,如果檔案讀寫位

      置指標已經到達檔案尾部,則eof函數返回非零值(真),如果沒有到達檔案尾部,則返回零值(假);
      一般情況下,帶圓括弧的eof()函數調用與不帶圓括弧的eof函數調用的效果是一樣的;但是如果與檔案輸入運算

      符<>一起使用的話,效果就不一樣了;當在命令列輸入多個檔案的時候,不帶圓括弧的eof函數調用在讀完每一

      個檔案的時候,都會認為讀到這個檔案尾部了,此時返回非零值(真),否則返回零值(假);而帶圓括弧的eof()函

      數調用則會認為只有當所有的檔案都讀取完了,才會認為是讀取檔案結束,也就是說只有當檔案讀寫位置指標

      到達最後一個檔案的尾部時,才會認為讀取檔案結束,此時eof()函數返回非零值(真),否則返回零值(假);只有

      所有檔案都讀過了,eof()函數才會返回真值,如果只是多個檔案中的前面幾個檔案的結尾,則eof()函數仍然返

      回假值,因為還有需要讀取的輸入;

四、系統讀寫函數:

1、read()函數:

     Perl把該函數設計得與UNUX系統中的fread()函數等效,用於從指定檔案中讀取任意長度的字元(位元組)數,並把讀

     到的資料存放區到一個簡單變數或數組元素中;調用文法如下:

     $BytesToRead  =  read(FileVariable,Buffer,Length,BytesTpSkip);

     FileVariable:用於隱藏檔控制代碼的簡單變數;

     Buffer:用於儲存read讀到的資料的簡單變數(或數組元素);

     Length:最多需要讀取的位元組數;

     BytesToSkip:可選項,用於指定讀取檔案之前需要跳過的位元組數;

     傳回值:傳回值為實際讀取到的位元組數;如果檔案讀寫位置指標已經到達檔案的尾部,則read()返回零;如果出

      錯,則read()返回空值;

2、sysread()函數:

     該函數用於更快地讀取資料,其實現與UNIX系統中的read()函數等效,與Perl中的read()函數相同;調用文法:

     $BytesToRead  =  sysread(FileVariable,Buffer,Length,BytesToSkip);

     FileVariable:用於隱藏檔控制代碼的簡單變數;

     Buffer:用於儲存讀取到的資料的簡單變數(或數組元素);

     Length:最多需要讀取的位元組數;

     BytesToSkip:可選項,用於指定在讀取檔案之前需要跳過的位元組數;

     傳回值:傳回值為實際讀取到的位元組數;如果檔案讀寫位置指標已經到達檔案尾部,則sysread()返回零;如果

     出錯,則sysread()返回空值;

3、syswrite()函數:

      該函數用於更快地寫入資料,其實現與UNIX中的write()函數等效;有4個參數:

      $BytesToWrite  =  syswrite(FileVariable,DataBuffer,Length,BytesToSkip);

      FileVariable:用於隱藏檔控制代碼的簡單變數;

      DataBuffer:用於存放將要寫入的資料的緩衝區;

      Length:需要寫入的位元組數;

      BytesToSkip:在寫檔案之前需要跳過的位元組數;

      傳回值:返回實際寫入的位元組數;如果出錯,則syswrite()返回空值;

4、getc()函數:

      該函數用於從指定檔案中讀取一個字元(位元組);其實現與UNIX C語言中的getc()函數等效;調用文法:

      $Char  =  getc(FileVariable);

      FileVariable:用於存放檔案控制代碼的簡單變數;

      傳回值:返回讀取到的字元;

5、binmode()函數:

      該函數用於讀取二進位檔案;當所在的系統對文字檔和二進位檔案有所區別時使用;必須在開啟檔案之後、

      讀取檔案之前調用;調用文法:

      binmode(FileVariable) ;

      FileVariable:用於存放檔案控制代碼的簡單變數;

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.