2012-07-10 80 views
1

我正在解析一個HTML文件,其中包含的數據與網格中的方式相關並且接近完成。我以前曾經認爲需要刪除所有空白行,但我沒有注意到網格中的一些字段是空白的。我正在嘗試使用Tie :: File模塊將文件存儲在一個數組中,對它進行迭代,如果有三個連續的空白行,我想插入一個虛擬值,稍後我可以對其進行操作,以便空白行消除不會改變我的數據結構。使用Tie :: Perl的Perl文件操作

我至今嘗試過(該文件是〜2 MB):

my @lines; 
my $num = 0; 
tie @lines, 'Tie::File', 'results.txt'; 
(tied @lines)->defer; 

foreach (@lines) 
{ 
    chomp $lines[$num]; 
    $num++; 
    if ($lines[$num-1] =~ /^$/ && $lines[$num+1] =~ /^$/) 
    { 
     $lines[$num] = "null"; 
    } 
} 

(tied @lines)->flush; 

untie @lines; 

編輯:我如何去遍歷陣列上並插入值所以每行之間只有一個空格所以我以後可以擺脫所有的空白行?

+0

請發佈一些示例輸入和期望的輸出。 – simbabque 2012-07-10 15:50:55

回答

1

如果我正確理解你的問題(更換三個連續的空行字「零」,並在兩側的空行),也許在你的文件的內容的正則表達式操作將有助於以下內容:

use Modern::Perl; 

my $htmlFile = do { local $/; <DATA> }; 

$htmlFile =~ s/(?<!\S)\n{3}/\nnull\n\n/g; 

say $htmlFile; 

__DATA__ 



A 
B 






C 
D 



E 
F 

Output: 

null 

A 
B 

null 


null 

C 
D 

null 

E 
F 
+0

感謝您的提示,我想我的邏輯是關閉的。 – squiguy 2012-07-10 19:22:47

+0

@squiguy:你很受歡迎!我不知道你的邏輯關閉了;以上僅提供了不同的解決方案。 – Kenosis 2012-07-10 19:30:53