2012-04-04 5 views
1

J'ai deux fichiers csv, et les deux ont la même structure de données.Comment distinguer les données des fichiers CSV

ID - Join_date - Last_Login 

Je veux comparer et obtenir les numéros de dossiers correspondant exactement à base de cet exemple:

les premiers fichiers a 100 dossiers, dont 20 ne sont pas inclus dans le fichier 2.

le 2ème fichier a 120 enregistrements.

Je veux un script en PHP pour comparer ces deux fichiers et construire deux fichiers CSV séparés.

Et je veux supprimer tous les enregistrements supplémentaires du 2ème fichier qui ne sont pas inclus dans le premier fichier.
Et supprimer tous les enregistrements du premier fichier qui ne sont pas inclus dans le 2e fichier.

Merci

+0

@TheJolly: [S'il vous plaît enlever « merci » et quand même édition] (http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be-removed-from-posts). Merci! – sarnold

Répondre

0

Il y a un utilitaire GNU comm qui le fera très facilement. Vous pouvez exec par php ou juste le faire directement. Si vous n'avez pas accès à comm, le plus simple serait de stocker les deux fichiers dans un tableau (probablement via file()) et d'utiliser array_intersect().

0

Vous essayez ceci pour un nombre limité de fichier CSV .. si vous avez un très grand format CSV je vous conseille d'importer directement dans MySQL

function csvToArray($csvFile, $full = false) { 
    $handle = fopen ($csvFile, "r"); 
    $array = array(); 
    while (($data = fgetcsv ($handle)) !== FALSE) { 
     $array [] = ($full === true) ? $data : $data[0]; // Full array or only ID 
    } 

    return $array; 
} 


$file1 = "file1.csv" ; 
$file2 = "file2.csv" ; 

$fileData1 = csvToArray($file1); 
$fileData2 = csvToArray($file2); 


var_dump(array_diff($fileData1,$fileData2)); 
var_dump(array_intersect($fileData1,$fileData2)); 
Questions connexes