ChatGPTは定型的なプログラムを書くのがとてもスピーディーです。
とある、Aのファイルのリストから、特定の条件でデータを抜き出したBのファイルを作り、AからBのデータを除外したデータを取り出したかったので、ChatGPTにお願いしてみました。
質問
phpで2つのファイルのリストから重複データを除外するプログラムを書いてください。
回答
以下は、PHPを使用して2つのファイルのリストから重複データを除外するプログラムの例です。
<?php // ファイルのパスを指定 $file1 = 'file1.txt'; $file2 = 'file2.txt'; $outputFile = 'output.txt'; // ファイルの内容を配列として読み込み $data1 = file($file1, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); $data2 = file($file2, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); // 重複データを除外する $uniqueData = array_unique(array_merge($data1, $data2)); // 結果を別のファイルに出力する file_put_contents($outputFile, implode("\n", $uniqueData)); echo "処理が完了しました。結果は $outputFile に保存されました。\n"; ?>
このプログラムでは、file() 関数を使用してファイルの内容を配列として読み込みます。FILE_IGNORE_NEW_LINES フラグを使用して、各行の末尾の改行文字を無視し、FILE_SKIP_EMPTY_LINES フラグを使用して、空行をスキップします。
次に、array_merge() 関数を使用して2つの配列を結合し、array_unique() 関数を使用して重複した要素を除外します。
結果を出力するために file_put_contents() 関数を使用します。$outputFile 変数に指定されたファイルに、重複を除外したデータを改行区切りで書き込みます。
最後に、処理が完了したことと結果が保存されたファイルのパスを出力します。
プログラムを実行する前に、$file1、$file2、および $outputFile 変数に実際のファイルパスを指定してください。また、ファイルはテキストファイルであり、各行に1つのデータが含まれていることを想定しています。重複が除外された結果は、$outputFile で指定されたファイルに保存されます。
これは$file1、$file2がぞれぞれ別のリストになっていて$file1の結果+$file2の結果の中から重複データを除外しています。
僕が求めているのはこれではありません。指示を変えてみます。
質問
$file1の中から$file2に含まれるデータを除外するプログラムに修正してください。
回答
了解しました。以下は、$file1 の中から $file2 に含まれるデータを除外するプログラムの修正版です。
<?php // ファイルのパスを指定 $file1 = 'file1.txt'; $file2 = 'file2.txt'; $outputFile = 'output.txt'; // ファイルの内容を配列として読み込み $data1 = file($file1, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); $data2 = file($file2, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); // $file2 に含まれるデータを除外する $filteredData = array_diff($data1, $data2); // 結果を別のファイルに出力する file_put_contents($outputFile, implode("\n", $filteredData)); echo "処理が完了しました。結果は $outputFile に保存されました。\n"; ?>
修正点は以下の通りです。
array_diff() 関数を使用して、$file1 のデータから $file2 に含まれるデータを除外します。array_diff() 関数は、最初の配列に存在し、他の配列には存在しない要素のみを返します。
$filteredData という変数を使用して、除外された結果のデータを保持します。
file_put_contents() 関数を使用して、除外されたデータを $outputFile に書き込みます。
上記の修正を加えた後、プログラムを実行する前に、$file1、$file2、および $outputFile 変数に実際のファイルパスを指定してください。除外された結果は、$outputFile で指定されたファイルに保存されます。
期待する結果が得られるようになりました。