在處理文字時,常常遇到這樣的情況:就是我們需要把兩行文字做乙個比較,然後選擇性輸出。而在while()程式塊中預設只能一次讀取一行。筆者在這裡,舉乙個簡單的例子來說明怎麼處理這種情況。
有乙個這樣一段文字:
a 1 2 3 4
a 5 6 7 8
a 6 7 8 9
a 7 8 9 11
a 7 8 9 12
a 13 12 14 15
a 18 14 16 17
a 2 3 4 65
策略一:把輸入文字存放到陣列中,然後利用for迴圈,一次輸出兩行做判斷。
指令碼如下:
#! /usr/bin/perl -w
use strict;
chomp(my @a=);
my @out;
for(my $i=0;$i<$#a;$i++)
my %ha;
my @new=grep ++<1}@out;
print $_,"\n" for@new;
__data__
a 1 2 3 4
a 5 6 7 8
a 6 7 8 9
a 7 8 9 11
a 7 8 9 12
a 13 12 14 15
a 18 14 16 17
a 2 3 4 65
策略一思路比較簡單,但是如果輸入文字過大,比較消耗記憶體。當然使用tie::file模組又是另外一回事情了。
在這裡,筆者利用tell和seek函式,對控制代碼定位做一下調整,就可以在while迴圈中,實現一次輸出多行,一行多次輸出了,是不是很方便呢?
**如下:
#! /usr/bin/perl -w
use strict;
my @out;
while()
}seek(data,$pos,0);
}my %ha;
my @new=grep $ha++ < 1,@out;
print $_,"\n" for@new;
__data__
a 1 2 3 4
a 5 6 7 8
a 6 7 8 9
a 7 8 9 11
a 7 8 9 12
a 13 12 14 15
a 18 14 16 17
a 2 3 4 65
程式執行的結果如下:
a 5 6 7 8
a 6 7 8 9
a 7 8 9 11
a 7 8 9 12
a 18 14 16 17
a 2 3 4 65
__結束__
hadoop hadoop的一次讀取
一次hadoop的read getfilesystem public static filesystem getfilesystem throws exception configuration configuration基本就是乙個空物件。新增了2個配置檔案到資源列表。adddefaultreso...
Linux讀取一行文字的方法
第一種方法 1.網上流行的乙個方法 列印出每行的文字資訊。include include int main void if line free line exit exit success 2.我自己稍作修改,取得指定行數的文字資訊。include include int get file line...
Java一次讀取文字檔案所有內容
我們做文字處理的時候的最常用的就是讀寫檔案了,尤其是讀取檔案,不論是什麼檔案,我都傾向於一次性將文字的原始內容直接讀取到記憶體中再做處理,當然,這需要你有一台大記憶體的機器,記憶體不夠者 可以一次讀取少部分內容,分多次讀取。讀取檔案效率最快的方法就是一次全讀進來,很多人用readline 之類的方法...