Perl模組之Tie::File
原文:http://hi.baidu.com/mylongwalk/blog/item/004df0220cc2cc4dad34dea0.html
perl的Tie::File模組真是與乎尋常的強大
Tie::File:
Tie::File - Access the lines of a disk file via a Perl array: 將一個file和array tie起來,對array所做的任何操作都會同步反映到file上,等同於對檔案進行了操作。
注意:Tie::File模組不適用於處理存放大量短小記錄的檔案!!
這裡所說的記錄型檔案,是指檔案讀寫時的最小單位是記錄而不是通常的位元組。資料記錄之間以記錄分隔符隔開,故要求檔案有效資料的內容不會與記錄分隔符相混淆。通常我們使用的文字檔案就屬於記錄型檔案,它的記錄分隔符在win32下是\r\n序列,在unix下則是\n。對於記錄型檔案,Perl提供了一個模組Tie::File將檔案同一個陣列關聯起來,對陣列進行操作就等價於對檔案本身進行操作,陣列內容所有的改變都會立即反映在檔案中。更令人興奮的是同檔案相關的這個陣列是一個“虛擬”陣列,本身並不會佔用多少空間,因此即使運算元以GB計的檔案也十分輕鬆。其用法如下:
use strict;
use warnings;
use Tie::File;
my @lines; # 檔案關聯陣列
my $filename='./test.dat'; # 記錄檔名
tie(@lines,'Tie::File',$filename) or die; # 將記錄檔案同陣列關聯,預設為文字型檔案
# 記錄分隔符使用"\r\n"或"\n"
$lines[0]="Hello"; # 這裡對陣列內容的操作就直接反映到檔案中去了
$lines[1]="world!"; # 增加一條新記錄
splice(@lines,1,0,"insert another line"); # 在老記錄之間插入記錄
delete $lines[0]; # 刪除記錄
untie(@lines); # 解除檔案同陣列的關聯
這就是對文字檔案的一系列操作,可以看出該模組使用起來十分靈活簡便。除此之外模組還有幾個選項可以調整細節行為,常用選項如下:
1. recsep
類似於$/, 用來指定記錄分隔符,分隔符可以是任意字串。每條記錄都不包含分隔符,但寫入檔案時都會自動附加上一個記錄分隔符,如果記錄內容本身已經附加有分隔符則會忽略。讀出記錄內容時會自動去除分隔符(由autochomp選項控制)。預設的記錄分隔符是"\r\n"或"\n",我們可以任意改變它以適應自己的需求。唯一需要注意的地方就是記錄分隔符不可與有效資料內容混淆,也不能為空(沒有記錄分隔符就談不上記錄型檔案了)。
tie (@array, 'Tie::File', $file, recsep => 'es');
This says that records are delimited by the string es
. If the file contained the following data:
Curse these pesky flies!\n
then the @array
would appear to have four elements:
1."Curse th"
2 ."e p"
3."ky fli"
4."!\n"
2. autochomp
指定讀出記錄時是否去除記錄分隔符,(預設)為真值時會自動去除分隔符。如:
Normally, array elements have the record separator removed, so that if the file contains the text
- Gold
- Frankincense
- Myrrh
the tied array will appear to contain ("Gold", "Frankincense", "Myrrh")(不包括換行)
If you set autochomp
to a false value, the record separator will not be removed. If the file above was tied with
- tie (@gifts, "Tie::File", $gifts, autochomp => 0);
then the array @gifts
would appear to contain ("Gold\n", "Frankincense\n", "Myrrh\n")
, or (on Win32 systems) ("Gold\r\n", "Frankincense\r\n", "Myrrh\r\n")
.
3. splice
spice是perl命令,不是此模組所獨有,用法如下:
splice ARRAY,OFFSET,LENGTH,LIST
splice ARRAY,OFFSET,LENGTH
splice ARRAY,OFFSET
splice ARRAY
從第offset個元素開始,刪除長度為length個元素,若list存在,則 用list代替刪除掉的資料(若lenght=0,則變成了新增)。若省略length,則刪除從offset開始的所有資料。offset和 length都省略則刪除所有元素。
除此之外還有mode、memory、dw_size等選項。另外在指定選項時可以在選項前加一個“-”號,即tie(...,-recsep=& gt;...)和tie(...,recsep=>...)這兩種形式是等價的。對該模組的進一步說明請參考perldoc Tie::File
http://perldoc.perl.org/Tie/File.html
相關文章
- perl Statistics::Descriptive Perl 的統計模組
- Perl 模組 Hash::Merge
- Perl的包和模組
- perl cpan 模組安裝
- tie的用法
- 【ningoo】編寫Perl模組Go
- 使用CPAN安裝Perl模組
- Nginx通過內建的Perl模組執行Perl程式Nginx
- perl的包(package)和模組(PM)Package
- Perl5的包和模組
- 測試mod_perl模組(轉)
- 比較perl模組的版本(轉)
- Perl 多執行緒模組 Parallel::ForkManager執行緒Parallel
- Angular vs. React - the tie breakerAngularReact
- 【NinGoo】Redhat上安裝Perl DBD::mysql模組GoRedhatMySql
- Perl網路程式設計的10個模組程式設計
- Perl的一些重要模組使用介紹
- 利用Perl的File::Basename包解析全檔案路徑資訊
- 受限制環境安裝Perl模組方法(轉)
- strawberry perl安裝,環境變數及模組安裝變數
- 查詢自己機子上是否有某一Perl模組
- python模組之collections模組Python
- perl
- DBI 資料庫模組剖析:Perl DBI 資料庫通訊模組規範,工作原理和例項資料庫
- Vuex之模組Vue
- TypeScript 之模組TypeScript
- 使用了一下perl的XML::Smart模組,真是太好用了XML
- Python模組之urllib模組Python
- 模組學習之hashlib模組
- JavaScript 複習之 File物件JavaScript物件
- ASM file和file alias之間的對映關係!ASM
- CentOS 6.5安裝perl模組報錯'Can't locate ExtUtils/Manifest.pm'CentOS
- TIE佈局下京東數科的生態難題
- 【構建Android快取模組】(二)Memory Cache & File CacheAndroid快取
- perl教程
- node之path模組
- python之模組Python
- Java學習之File類理解Java