2

以前、この質問をここに投稿しましたが、回答がありませんでした。私は何か間違ったことをしたかもしれないので、ここでもいくつかの詳細があります。

ディレクトリ内のファイルの名前は1.txt、2.txt、3.txtなどです。以下のスニペットはそのディレクトリに入り、それらを読み取るすべての*、txtファイルを開き、重複を削除して、すべてのファイルを含む1つのファイルを作成します。ユニークなコンテンツ。(この場合の名前)。

$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で大きな助けに感謝します。

しかし、私はそれをさらに一歩進めたいと思っています。

1つの大きな重複した無料の「allofthem.txt」ファイルの代わりに、上記のコードを変更して、新しいデータからそれぞれ最大500行のファイルを作成するにはどうすればよいですか?

$dirname。"/done /"。$i。"。txt"などの新しいディレクトリに移動する必要があります。ループでカウントしようとしましたが、うまくいきませんでした。

また、500を配列にプッシュし、別の配列にインクリメントして、その方法で保存しようとしました。運がない。私はそれを「取得」していません。

繰り返しになりますが、この初心者には専門家の支援が必要です。前もって感謝します。

4

3 に答える 3

5

コードに従って行の配列を取得したら、を使用して500行のチャンクに分割しarray_chunk、各チャンクを独自のファイルに書き込むことができます。

// ... 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++;
}
于 2010-09-11T14:34:05.453 に答える
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;
}

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

于 2010-09-11T14:33:21.257 に答える
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));
}
于 2010-09-11T14:36:05.063 に答える