人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPで動作するCSVファイルのマッチングプログラムを探しています。
マスターファイルとキーファイルを比較し、マッチすればマスターファイルからレコードを抜き出してCSVで出力します。
条件は以下になります。
・マスターファイル、キーファイル共にランダムに登録されています。
・マスターファイルのフィールドにはレコードナンバーがありません。
・抜き出して出力するCSVファイルはマスターレコード順です。
・処理終了後、出力処理件数とマッチしなかったキーを表示します。
・マスター、キー共に、最大データ数は300件未満です。
サンプルデータは以下になります。
http://www.kinkikids.biz/work/master.csv
http://www.kinkikids.biz/work/key.csv

●質問者: どうもと
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:CSV PHP キー キーファ スター
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● t_shiono
●100ポイント ベストアンサー

汎用的なプログラムというよりはちょっと書いちゃったほうが早い気がします。

コマンドラインで動作させる形になりますが、いい加減なコードでよければ参考にしてください。

エラーチェックはしてませんが、コマンドラインでスクリプトを実行し、マスターファイル名、キーファイル名、出力ファイル名を引数にして渡すと動作します。

<?php
$masterFile = $argv[1];
$keyFile = $argv[2];
$outputFile = $argv[3];

$items = file($masterFile, FILE_IGNORE_NEW_LINES | FILE_BINARY);
$keys = file($keyFile, FILE_IGNORE_NEW_LINES | FILE_BINARY);

$checkList = array();
for ($i = 0; $i < count($keys); ++$i) {
 $checkList[] = false;
 $keys[$i] = trim($keys[$i]);
}

$fout = fopen($outputFile, "wb");

$count = 0;
for ($i = 1; $i < count($items); ++$i) {
 $item = $items[$i];
 $elements = explode(',', $item);

 $index = array_search($elements[0], $keys);
 if ($index !== FALSE) {
fwrite($fout, $items[$i] . "\n");
++$count;

$checkList[$index] = true;
 }
}

fclose($fout);

$unmatched = array();
for ($i = 0; $i < count($keys); ++$i) {
 if (!$checkList[$i]) {
$unmatched[] = $keys[$i];
 }
 }

print "Matched : $count\n";
print "Unmacked Keys : " . implode(',', $unmatched) . "\n";

?>
◎質問者からの返答

完璧です!ありがとうございました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ