如何使用perl的Tie::File?模塊刪除文件固定行
使用perl的Tie::File 模塊刪除文件固定行, 為了說明簡單代碼中處理的是固定第二行開始的3行長度。下面給出perl代碼:
#! /usr/bin/perl use v5.14; use Tie::File; if (@ARGV == 0) { say "請輸入一個文件名 !!!"; exit 1; } my $filePath = $ARGV[0]; tie my @arry, 'Tie::File', $filePath; # 刪除第二行開始的三行內(nèi)容 # 如果這里的索引值越界, 對文件內(nèi)容沒有影響 splice @arry, 1, 3;
這里的處理主要利用了perl的Tie::File 模塊把數(shù)組和文件綁定,然后就可以使用perl的splice函數(shù)操作數(shù)組,從而達(dá)到操作文件的目的。對于Tie::File 模塊的用法,可以使用perldoc Tie::File 查詢到詳細(xì)說明:
Perl 模塊 Tie::File應(yīng)用舉例
1 Tie::File
建立一個list和file的關(guān)系,對list的操作會反映到file上去。
use Tie::File; tie @array, 'Tie::File', filename or die ...; $array[13] = 'blah'; # line 13 of the file is now 'blah' print $array[42]; # display line 42 of the file $n_recs = @array; # how many records are in the file? $#array -= 2; # chop two records off the end for (@array) { s/PERL/Perl/g; # Replace PERL with Perl everywhere in the file } # These are just like regular push, pop, unshift, shift, and splice # Except that they modify the file in the way you would expect push @array, new recs...; my $r1 = pop @array; unshift @array, new recs...; my $r2 = shift @array; @old_recs = splice @array, 3, 7, new recs...; untie @array; # all finished
2 應(yīng)用舉例
use Tie::File; my @array; my $filename = "a.txt"; tie(@array,'Tie::File',$filename) or die; print "$array[3] "; print "$#array "; $array[3] = "hello"; $array[1] = "world"; splice(@array, 1, 0, "insert into 0 and 1 line"); delete $array[$#array]; $#array -= 2; print pop @array; untie($array);
3 more help
perldoc Tie::File
對于splice函數(shù)可以使用 perldoc -f splice 查詢文檔:
Perl 函數(shù) splice
splice ARRAY, OFFSET, LENGTH, LIST splice ARRAY, OFFSET, LENGTH splice ARRAY, OFFSET splice ARRAY
這個函數(shù)從一個 ARRAY 中刪除 OFFSET 和 LENGTH 指明的元素,并且,如果給出了LIST,則用 LIST 的元素替換它。如果 OFFSET 是負(fù)數(shù),那么該函數(shù)從數(shù)組的后面向前數(shù),但如果該值會伸到數(shù)組開頭的前面,那么就會拋出一個例外。在列表環(huán)境中,splice 返回從該數(shù)組中刪除的元素。在標(biāo)量環(huán)境中,它返回最后刪除的元素,而如果沒有的話返回 undef。如果新元素的數(shù)量不等于舊元素的數(shù)量,那么該數(shù)組根據(jù)需要伸縮,并且元素的位置根據(jù)銜接后的情況進(jìn)行改變。如果省略了 LENGTH,那么該函數(shù)從數(shù)組里刪除從 OFFSET 開始的所有東西。如果省略了 OFFSET,那么該數(shù)組在讀取的時候清空。下面的等式成立(假設(shè) $[ 為 0):
splice 函數(shù)還可以方便地用于切開傳遞給子過程的參數(shù)列表。比如,假設(shè)列表長度在列表之前傳遞:
sub list_eq { # 比較兩個列表值 my @a = splice(@_, 0, shift); my @b = splice(@_, 0, shift); return 0 unless @a == @b; # 長度相同? while(@a) { return 0 if pop(@a) ne pop(@b); } return 1; } if (list_eq($len, @foo[1..$len], scalar(@bar), @bar)) { ... }
不過,拿數(shù)組引用來干這事更清晰一些。
Perl 文本文件的讀寫操作、文件的重命名和刪除、多個文本文件的合并實(shí)現(xiàn)代碼
到此這篇關(guān)于如何使用perl的Tie::File 模塊刪除文件固定行的文章就介紹到這了,更多相關(guān)perl刪除文件固定行內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
perl命令行參數(shù)內(nèi)建數(shù)組@ARGV淺析
這篇文章主要介紹了perl命令行參數(shù)內(nèi)建數(shù)組@ARGV淺析,本文重點(diǎn)在于講解@ARGV的用法,并通過實(shí)例來說明,需要的朋友可以參考下2014-06-06使用perl清理電腦上重復(fù)文件實(shí)現(xiàn)代碼(續(xù))
使有perl搜索電腦上的重復(fù)文件并刪除,需要的朋友可以參考下2013-02-02兩段Perl腳本代碼(數(shù)組應(yīng)用與say用法)
兩段Perl代碼(數(shù)組應(yīng)用與say用法),供大家學(xué)習(xí)參考2013-02-02