久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    使用Tie::File模塊對記錄型文件進行原地修改

     cicy000 2013-01-29
    注意: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"); # 在老記錄之間插入記錄                  
    print "$lines[1]\n"; # 讀出已有記錄的內容                                        
    $lines[0].=" folks"; # 修改已有記錄的內容                                        
    delete $lines[0]; # 刪除記錄                                                      
      
    untie(@lines); # 解除文件同數組的關聯                                            
      
    這就是對文本文件的一系列操作,可以看出該模塊使用起來十分靈活簡便。除此之外模塊還有幾個選項可以調整細節行為,常用選項如下:
      
    recsep
         用于指定記錄分隔符,分隔符可以是任意字符串。每條記錄寫入文件時都會自動附加上一個記錄分隔符,如果記錄內容本身已經附加有分隔符則會忽略(模塊不對這 一行為作任何擔保,最好不要自行附加記錄分隔符),讀出記錄內容時會自動去除分隔符(由autochomp選項控制)。默認的記錄分隔符是"\r\n" 或"\n",我們可以任意改變它以適應自己的需求。唯一需要注意的地方就是記錄分隔符不可與有效數據內容混淆,也不能為空(沒有記錄分隔符就談不上記錄型 文件了)。比如我們可以用C語言存放字符串的形式將字符串寫入文件:
    tie(@lines,'Tie::File',$filename,recsep=>chr(0)) or die
    push(@lines,"Hello,world!");                            
    push(@lines,"That's all, folks!");                      
    也可以用特定的字節序列作為分隔符,在文件中存放二進制數據:
    tie(@lines,'Tie::File',$filename,recsep=>pack("C*",0xff,0x0,0xff,0x0)) or die
    $lines[0]=pack("C*",0xaa,0xbb,0xcc,0xdd,0xee);                                
      
    autochomp
    指定讀出記錄時是否去除記錄分隔符,為真值時會自動去除分隔符。如:
    tie(@lines,'Tie::File',$filename,autochomp=>0) or die; # 保留記錄分隔符
    print "'$lines[0]'\n"; # 打印出的內容會包含回車符                      
      
    除此之外還有mode、memory、dw_size等選項。另外在指定選項時可以在選項前加一個“-”號,即tie(...,-recsep=& gt;...)和tie(...,recsep=>...)這兩種形式是等價的。對該模塊的進一步說明請參考perldoc Tie::File
      
    --
                   出塞
                  王昌齡
      秦時明月漢時關,萬里長征人未還。
      但使龍城飛將在,不教胡馬度陰山。
      
      
    ※ 修改:·chaoslawful 于 Aug  4 23:38:22 修改本文·[FROM: 222.81.18.71]
    ※ 來源:·BBS 水木清華站 smth.org·[FROM: 222.81.19.69]

      本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發現有害或侵權內容,請點擊一鍵舉報。
      轉藏 分享 獻花(0

      0條評論

      發表

      請遵守用戶 評論公約

      類似文章 更多

      主站蜘蛛池模板: 国产精品自在欧美一区| 久久国产加勒比精品无码| 日产无人区一线二线三线乱码蘑菇| 久久夜色精品国产嚕嚕亚洲AV| 亚洲国产精品午夜福利| 欧美亚洲综合成人A∨在线| 亚洲精品无码久久久久SM| 久久99热只有频精品8| 尹人香蕉久久99天天拍| 深夜视频国产在线观看| 亚洲最大成人网色| 国产精品久久蜜臀av| 国产精品福利自产拍在线观看| 中文字幕在线国产精品| 久久久噜噜噜久久| 人妻中文字幕不卡精品| 国产果冻豆传媒麻婆精东| 桃花岛亚洲成在人线AV| 国产精品自产拍在线观看中文 | 天天爽夜夜爱| 日本XXXX色视频在线观看免费不卡| 毛片免费观看天天干天天爽| 18禁无遮挡啪啪无码网站破解版 | 国产精品无码免费播放| 亚洲制服丝袜中文字幕在线| 欧美交a欧美精品喷水| 免费国产黄线在线观看| 国产中文字幕日韩精品| 乱子真实露脸刺激对白| 人妻少妇456在线视频| 国产精品国产三级国快看| 亚洲丰满熟女一区二区蜜桃| 无码日韩做暖暖大全免费不卡| 播放灌醉水嫩大学生国内精品 | 国产线播放免费人成视频播放| 亚洲AV中文无码乱人伦在线观看| 国产日产精品系列| 日韩中文字幕亚洲精品| 亚韩精品中文字幕无码视频| 国产精品福利在线观看无码卡一| 国产精品美女久久久久久麻豆|