2012-10-12 58 views
0

我找這個建議:PHP:打開.txt文件,逐行讀取線,去除(YEAR)

我有一個名爲movies.txt約900行的文本文件,其中包含一個電影每行的名稱。不過,我想刪除使用PHP(我是新來的)

格式基本上是當年影片已被釋放:

A Nous la Liberte (1932) 
About Schmidt (2002) 
Absence of Malice (1981) 
Adam's Rib (1949) 
Adaptation (2002) 
The Adjuster (1991) 
The Adventures of Robin Hood (1938) 
Affliction (1998) 
The African Queen (1952) 

所以我在尋找一種方式來打開文本文件,逐行讀取並刪除(YEAR)值,同時刪除(YEAR)之前的空格。

然後我想將其保存爲newmovies.txt

將是巨大的,如果你能證明並解釋我,我需要有效的解決方案。我對PHP仍然很陌生(一週前開始),所以對我來說這仍然很神奇。

+0

到目前爲止你有什麼? – Nasreddine

+1

你真的應該在發佈之前做一些研究。比什麼都重要,它會幫助你理解。以下是一些相關易讀資源的鏈接。 [如何閱讀文本文件](http://www.tizag.com/phpT/fileread.php),如何替換字符串[1](http://www.regular-expressions.info/),[2] ](http://php.net/manual/en/function.preg-replace.php) –

+0

這裏的一些例子http://stackoverflow.com/questions/8256907/regex-in-php-as-an-example- replace-b-tags-with-i – WebDevPT

回答

6

您可以使用file()函數以行方式讀取文件。然後foreach,直到右括號。

例如

foreach (file($fn) as $line) { 
    $output[] = strtok($line, "("); 
} 

您可能需要修剪多餘的空間,然後重新添加換行。

所以,正則表達式可能比較簡單而且還說了一些結構,而不一味切東西關:

$text = file_get_contents($fn); 
$text = preg_replace('/\s*\(\d+\)/m', '', $text); 
    # \s* is for spaces and \d+ is a placeholder for numbers 

然後保存回。

+1

'〜s * [(] \ d + [)] $〜m'會更安全一些嗎? –

+0

由於在這些文本文件中可能存在稀疏的尾隨空格,因此不確定是否有'$'。但是,當然是有道理的。 – mario

+0

我明白了。在這種情況下,使用'm'修飾符是沒有意義的。 –

1
<?php 
$toWrite = ""; 
$handle = @fopen("input.txt", "r"); 
if ($handle) { 
    while (($buffer = fgets($handle, 4096)) !== false) { 
     $toWrite .= preg_replace('/\(\d+\)/', '', $buffer) . "\n"; 
    } 
    if (!feof($handle)) { 
     echo "Error: unexpected fgets() fail\n"; 
    } 
    fclose($handle); 
    file_put_contents("input.txt", $toWrite); 
} 
?> 
+0

首先使用'fopen'然後'file_put_contents'?我建議你簡化一點。 – hakre