2012-07-29 27 views
4

我有一個約25,000行的文本文件。約525kb。刪除開頭有特定圖案的線條

一些行在開頭處有隨機文本。有些具有長分號的字符串。

一些其他人只有三個分號,然後在同一行上有一個空格和可選的更多文本。這些是我想要刪除的行。

下面是一個示例....

;;; Updated Time 20120706122706 
    ;;; Generic DEveloper Output 

    ;;; Some Random Comments 
    ;;; I got some more... 
    ;;; Yet another uneeded line 
    ;;; Thanks for using StackOverflow <http://stackoverflow.com>, or... 
    ;;; Not. 

    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Banana Production 

    [Data_Release_Version] 
    Version=12586 
    Released=20120706122706 

    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Baseline Properties 

    [BaseLineProperties] 
    Comment=BaselineProperties 

-----等。

一旦它達到4或更多的第一行;在線上,我需要文件的其餘部分,因爲沒有「;;;」行。

試圖找到快速的東西,而不是讀取所有行,並將其寫回,如果它不匹配「;;;」。

文件是ASCII(可能是UTF-8)文本類型文件。

任何想法?

謝謝你的時間,幫助和知識。

+2

你可以嘗試解釋你又想要什麼。這不是很清楚。你想刪除多於4個分號的行嗎? – 2012-07-29 06:31:41

+0

我想刪除以「;;;」開頭的行,而不是具有多於或少於3個分號然後是空格的行。只要我連續排列4個或更多的分號,就可以停止刪除線條。 我基本上想要刪除一個在開頭有一個隨機數行的標題。 – 2012-08-05 07:31:07

回答

0

我想你自己給出了答案:

製作一個腳本逐行讀取輸入文件一行在一個循環(同時)。如果滿足兩個條件,它會將每行寫入輸出文件:1.標誌(「done」)爲FALSE,2.行不以「;;;」開頭(不是空白)。這將刪除以三個分號開頭的行。一旦你找到一行包含更多分號的行,你可以將該標誌設置爲TRUE,因此剩下的行將被複制而不被檢查。

1

取決於..我會嘗試加載到一個字符串,然後用換行符做一個爆炸(),所以它在數組中,然後運行一個foreach與任何沒有strpos === - 和strpos !== false,如果不匹配,可以繼續跳到下一行。

另一種選擇是解析,跳過,甚至使用fseek等。取決於很多不同的因素,以確定什麼是最快的。

您可以稍後內爆,並重新添加換行符,然後推出文件和/或使用換行符。取決於輸出應該去的地方。

4

我有什麼建議是使用file_get_contents()和保存文件的內容在一個變量爲一個字符串,然後使用explode()該字符串在每次換行字符,然後在foreach循環,使用preg_match()檢查,如果符合3個分號開始和一個空間,如果它是劑量的,則將其放入另一個名爲$output的陣列中。之後,implode()$output並添加換行符並使用file_put_contents()將其打印到另一個文件中。希望這有助於:-)

代碼:

<?php 
$string = file_get_contents($filename); 
$array = explode("\n",$string); 
foreach($array as $arr) { 
    if(!(preg_match("^;;;\s",$arr))) { 
     $output[] = $arr; 
    } 
} 

$out = implode("\n",$output); 
file_put_contents($path,$out); 
?>