小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

使用Tie::File模塊對(duì)記錄型文件進(jìn)行原地修改

 cicy000 2013-01-29
注意:Tie::File模塊不適用于處理存放大量短小記錄的文件!!
  
     這里所說(shuō)的記錄型文件,是指文件讀寫(xiě)時(shí)的最小單位是記錄而不是通常的字節(jié)。數(shù)據(jù)記錄之間以記錄分隔符隔開(kāi),故要求文件有效數(shù)據(jù)的內(nèi)容不會(huì)與記錄分隔符相混 淆。通常我們使用的文本文件就屬于記錄型文件,它的記錄分隔符在win32下是\r\n序列,在unix下則是\n。對(duì)于記錄型文件,Perl提供了一個(gè) 模塊Tie::File將文件同一個(gè)數(shù)組關(guān)聯(lián)起來(lái),對(duì)數(shù)組進(jìn)行操作就等價(jià)于對(duì)文件本身進(jìn)行操作,數(shù)組內(nèi)容所有的改變都會(huì)立即反映在文件中。更令人興奮的是 同文件相關(guān)的這個(gè)數(shù)組是一個(gè)“虛擬”數(shù)組,本身并不會(huì)占用多少空間,因此即使操作數(shù)以GB計(jì)的文件也十分輕松。其用法如下:
  
use strict;                                                                      
use warnings;                                                                    
use Tie::File;                                                                    
  
my @lines; # 文件關(guān)聯(lián)數(shù)組                                                        
my $filename='./test.dat'; # 記錄文件名                                          
  
tie(@lines,'Tie::File',$filename) or die; # 將記錄文件同數(shù)組關(guān)聯(lián),默認(rèn)為文本型文件
                                          
# 記錄分隔符使用"\r\n"或"\n"            
  
$lines[0]="Hello"; # 這里對(duì)數(shù)組內(nèi)容的操作就直接反映到文件中去了                  
$lines[1]="world!"; # 增加一條新記錄                                              
splice(@lines,1,0,"insert another line"); # 在老記錄之間插入記錄                  
print "$lines[1]\n"; # 讀出已有記錄的內(nèi)容                                        
$lines[0].=" folks"; # 修改已有記錄的內(nèi)容                                        
delete $lines[0]; # 刪除記錄                                                      
  
untie(@lines); # 解除文件同數(shù)組的關(guān)聯(lián)                                            
  
這就是對(duì)文本文件的一系列操作,可以看出該模塊使用起來(lái)十分靈活簡(jiǎn)便。除此之外模塊還有幾個(gè)選項(xiàng)可以調(diào)整細(xì)節(jié)行為,常用選項(xiàng)如下:
  
recsep
     用于指定記錄分隔符,分隔符可以是任意字符串。每條記錄寫(xiě)入文件時(shí)都會(huì)自動(dòng)附加上一個(gè)記錄分隔符,如果記錄內(nèi)容本身已經(jīng)附加有分隔符則會(huì)忽略(模塊不對(duì)這 一行為作任何擔(dān)保,最好不要自行附加記錄分隔符),讀出記錄內(nèi)容時(shí)會(huì)自動(dòng)去除分隔符(由autochomp選項(xiàng)控制)。默認(rèn)的記錄分隔符是"\r\n" 或"\n",我們可以任意改變它以適應(yīng)自己的需求。唯一需要注意的地方就是記錄分隔符不可與有效數(shù)據(jù)內(nèi)容混淆,也不能為空(沒(méi)有記錄分隔符就談不上記錄型 文件了)。比如我們可以用C語(yǔ)言存放字符串的形式將字符串寫(xiě)入文件:
tie(@lines,'Tie::File',$filename,recsep=>chr(0)) or die
push(@lines,"Hello,world!");                            
push(@lines,"That's all, folks!");                      
也可以用特定的字節(jié)序列作為分隔符,在文件中存放二進(jìn)制數(shù)據(jù):
tie(@lines,'Tie::File',$filename,recsep=>pack("C*",0xff,0x0,0xff,0x0)) or die
$lines[0]=pack("C*",0xaa,0xbb,0xcc,0xdd,0xee);                                
  
autochomp
指定讀出記錄時(shí)是否去除記錄分隔符,為真值時(shí)會(huì)自動(dòng)去除分隔符。如:
tie(@lines,'Tie::File',$filename,autochomp=>0) or die; # 保留記錄分隔符
print "'$lines[0]'\n"; # 打印出的內(nèi)容會(huì)包含回車(chē)符                      
  
除此之外還有mode、memory、dw_size等選項(xiàng)。另外在指定選項(xiàng)時(shí)可以在選項(xiàng)前加一個(gè)“-”號(hào),即tie(...,-recsep=& gt;...)和tie(...,recsep=>...)這兩種形式是等價(jià)的。對(duì)該模塊的進(jìn)一步說(shuō)明請(qǐng)參考perldoc Tie::File
  
--
               出塞
              王昌齡
  秦時(shí)明月漢時(shí)關(guān),萬(wàn)里長(zhǎng)征人未還。
  但使龍城飛將在,不教胡馬度陰山。
  
  
※ 修改:·chaoslawful 于 Aug  4 23:38:22 修改本文·[FROM: 222.81.18.71]
※ 來(lái)源:·BBS 水木清華站 smth.org·[FROM: 222.81.19.69]

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多