2012-03-10 87 views
-1

我的文件中包含該內容(的1.txt):複製文件內容到另一個文件

  • user.php的ID = XXXXXX
  • user.php的ID = XXXXXX
  • user.php的? ID = XXXXXX
  • user.php的?ID = XXXXXX
  • user.php的?ID = XXXXXX
  • 文/數字
  • user.php的?ID = XXXXXX
  • user.php的?ID = XXXXXX
  • 等等...

(XXXXXX =數字)

有可能只採取user.php的?ID = XXXXXX,並將它們複製到另一個文件,而不處理不必要的文本,因爲文件包含大約50 000行?

+6

似乎是一個非常簡單的問題。你嘗試了什麼? – 2012-03-10 10:34:25

+0

是的,這是可能的。請提供一些你的代碼。 – Alp 2012-03-10 10:36:05

回答

3
<?php 
    //Get all the matches from the file 
    $fileContents = file_get_contents('1.txt'); 
    preg_match_all('/user.php\?id=[0-9]{6}/', $fileContents, $matches); 

    //Output to new file 
    $fh = fopen('output.txt', 'w+'); 
    foreach ($matches['0'] as $match) { 
     fputs($fh, $match."\r\n"); 
    } 
    fclose($fh); 
?> 
+1

順便說一句,應該是:$比賽[0] – ZeroSuf3r 2012-03-10 11:56:49

6
<?php 
    $file = fopen('source.txt', 'rb'); 
    $newfile = fopen('target.txt', 'wb'); 
    while(($line = fgets($file)) !== false) { 
    if(strpos($line, 'user.php') !== false) { 
     fputs($newfile, $line); 
    } 
    } 
    fclose($newfile); 
    fclose($file); 
    ?> 

此代碼尚未經過測試,但我認爲這將正常工作。

+0

這將工作,但由於輸入文件很大,它不是非常有效的內存。逐行讀寫由'fopen'創建的流將更好。 – 2012-03-10 10:42:43

+0

我修改了它,你能幫我查看這段代碼嗎?我不確定它是否包含語法錯誤,因爲我用我的諾基亞E63鍵入了它。 – 2012-03-10 10:54:33

+0

現在它工作的很好,正是我的意思。一個建議:加'B'標誌開口模式(第二'fopen'參數),手動有對此問題的說明:'對於便攜性,強烈建議用打開文件時總是使用「b」標記fopen()。請參閱['fopen'文檔](http://php.net/manual/en/function.fopen.php)瞭解此建議背後的原因。 – 2012-03-10 11:02:06

-1
<?php 
error_reporting(0); 
$fs=fopen("1.txt", "r"); 
$ft=fopen("2.txt", "w"); 

if ($fs==NULL) 
{ 
    echo "Can't Open Source File ..."; 
    exit(0); 
} 

if ($ft==NULL) 
{ 
    echo "Can't Open Destination File ..."; 
    fclose ($fs); 
    exit(1); 
} 

else 
{ 
    while ($ch=fgets($fs)) 
     fputs($ft, $ch); 

    fclose ($fs); 
    fclose ($ft); 
} 

//echo "File Handling successfully ..."; 
?> 
+0

簡單地張貼代碼片段不能充分回答這個問題。考慮添加關於您的代碼如何解決問題的解釋。 – adamdunson 2013-12-09 14:30:07

相關問題