2010-09-11 37 views
2

我在這裏發佈了這個問題,但沒有迴應。我可能做錯了,所以這裏再詳細一些。PHP - 如何打開文件並讀取它們,然後用每個文件的「x」行編寫新文件?

該目錄中的文件名爲1.txt,2.txt,3.txt等....下面的代碼段進入該目錄,打開所有讀取它們的*,txt文件,刪除這些文件並創建一個文件與所有獨特的內容。 (在這種情況下名稱)。

$files = glob($dirname."/*.txt"); //matches all text files 
    $lines = array(); 
    foreach($files as $file) 
    { 
    $lines = array_merge($lines, file($file, FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINES)); 
    } 
    $lines = array_unique($lines); 
    file_put_contents($dirname."/allofthem.txt", implode("\n", $lines)); 
    } 

上面的作品對我很好!感謝這裏在stackoverflow的幫助。

但是,我希望更進一步。

而不是一個大的重複免費的「allofthem.txt」文件,我如何修改上面的代碼來創建新的數據最多5oo行的文件?

他們需要進入一個新的目錄,例如$ dirname。「/ done /".$ i。」。txt「我已經嘗試過在循環中計數,但是我的努力沒有奏效,最終長達一英里。

我也嘗試將500推入數組中,增加到另一個數組並保存。沒有運氣。我只是沒有「獲得」它。

同樣,這個初學者需要一些專家的幫助。提前致謝。

+0

最後一個'}'從哪裏來? – BoltClock 2010-09-11 14:33:46

回答

5

一旦你有你的線陣列,按您的代碼,你可以打破成使用array_chunk的500線的塊,然後寫每個塊到其自身的文件:

// ... from your code 
$lines = array_unique($lines); 

$counter = 1; 
foreach (array_chunk($lines, 500) as $chunk) 
{ 
    file_put_contents($dirname . "/done/" . $counter . ".txt", implode("\n", $chunk)); 
    $counter++; 
} 
+0

+1比我更優雅的解決方案! – halfdan 2010-09-11 14:36:39

+0

+1''array_chunk()'。 – BoltClock 2010-09-11 14:37:09

+0

哇!像魅力一樣工作! – 2010-09-11 15:25:07

1

這個功能會讓你到某個地方!

function files_identical($fn1, $fn2) { 
    if(filetype($fn1) !== filetype($fn2)) 
     return FALSE; 

    if(filesize($fn1) !== filesize($fn2)) 
     return FALSE; 

    if(!$fp1 = fopen($fn1, 'rb')) 
     return FALSE; 

    if(!$fp2 = fopen($fn2, 'rb')) { 
     fclose($fp1); 
     return FALSE; 
    } 

    $same = TRUE; 
    while (!feof($fp1) and !feof($fp2)) 
     if(fread($fp1, 4096) !== fread($fp2, 4096)) { 
      $same = FALSE; 
      break; 
     } 

    if(feof($fp1) !== feof($fp2)) 
     $same = FALSE; 

    fclose($fp1); 
    fclose($fp2); 

    return $same; 
} 

源:http://www.php.net/manual/en/function.md5-file.php#94494

0
$files = glob($dirname."/*.txt"); //matches all text files 
$lines = array(); 
foreach($files as $file) 
{ 
    $lines = array_merge($lines, file($file, FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINES)); 
} 
$lines = array_unique($lines); 
$lines_per_file = 500; 
$files = count($lines)/$lines_per_file; 
if(count($lines) % $lines_per_file > 0) $files++; 
for($i = 0; $i < $files; $i++) { 
    $write = array_slice($lines, $lines_per_file * $i, $lines_per_file); 
    file_put_contents($dirname."/done/".$i.".txt", implode("\n", $write)); 
} 
相關問題