2010-09-11 57 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)); 
} 
相关问题