使用PHP我已经整天尝试完成这项工作。我失败了。我想:
对于大师来说很容易,对我来说麻木了。
注意:每个文件可能长500行,每行20个字符,但只有大约20个文件。
提前感谢您的帮助。
再次感谢。 基于下面的帖子我试过
$topdir = '/home/mycal25/public_html/processed/';
$files = glob($topdir."*.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($topdir."all/all.txt", implode("\n", $lines));
但那不起作用...... 我尝试了其他一些变化无济于事。
答案 0 :(得分:4)
类似的东西:
$lines = array()
foreach ($files as $file) {
$lines = array_merge($lines, file($file));
}
$lines = array_unique($lines);
$fp = fopen('dest.txt', 'w');
foreach ($lines as $line) {
fwrite($fp, $line);
}
fclose($fp);
或者,您可以在每次加载新文件时检查唯一条目的位置不同。这样可以节省RAM,但可能会占用更多的CPU。
根据您对opendir的评论,您可以执行以下操作:
$files = glob('/home/mycal25/public_html/processed/*');
或坚持使用opendir()
$topdir = '/home/mycal25/public_html/processed';
$dh = opendir($topdir);
while (($file = readdir($dh)) !== false) {
$lines = array_merge($lines, file($topdir . '/' . $file));
}
我在某些地方跳过了一些重要的错误检查,只是为了让代码更简单,更容易阅读。但是如果你想确定,请始终检查opendir / glob / fopen等的返回值
答案 1 :(得分:0)
要指出的是,如果新文件的排序顺序无关紧要,在基于unix的系统上使用sort -u
可能会帮助您轻松实现。
如果您在基于unix的主机上运行PHP,则很可能会使用sort
到system()。
答案 2 :(得分:0)
这就是我要做的事情:而不是内联函数调用将它们作为自己的语句写出来,并将它们的返回值保存到有意义的变量中。看看这个:
$topDir = '/home/mycal25/public_html/processed/';
/* Grab names of all needed text files */
$filePaths = glob($topdir . '*.txt');
$names = array();
foreach($filePaths as $filePath) {
$fileLines = file($file, FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINES);
$names = array_merge($names, $fileLines);
}
$uniqueNames = array_unique($names);
$nameList = implode("\n", $uniqueNames);
file_put_contents($topDir . 'all/all.txt', $nameList);
这是我的个人风格。你现在可以做的是var_dump()每个变量并运行你的脚本。通过这样做,您最终将通过输出找出哪个变量不包含您希望它包含的内容。
此外,请确保已启用所有错误报告。无耻的堵塞:http://www.needtodevelop.com/error-reporting-in-php
答案 3 :(得分:0)
<?php
$lines = array();
foreach($files as $file)
{
$lines = array_merge($lines, array_fill_keys(file($file, FILE_SKIP_EMPTY_LINES), 1));
}
file_put_contents('file.txt', implode(array_keys($lines)));
?>