Page 1 sur 1

Comparer 2 CSV de 20 000 ligne chacun en php

Posté : 01 déc. 2008, 18:58
par uspy62
Bonjour à tous, j'aimerais savoir si vous avez une idée de la méthode à utiliser en php pour comparer deux fichier CSV de 20 000 lignes chacun.
Ca risque de ramer avec un script normal de comparaison ?

Merci d'avance.

Posté : 01 déc. 2008, 22:28
par Sékiltoyai
Quel genre de comparaison ?

Posté : 01 déc. 2008, 22:45
par uspy62
Oui pardon, je n'ai pas été assez précis.
En fait les deux fichiers proviennent de 2 bases de données différentes de différents logiciels ...
Le seul export commun, c'est le CSV, et je voudrais faire un outil PHP qui pourra comparer ces deux fichiers.

Ces deux fichiers contiennent les mêmes informations, sauf qu'un fichier est mis à jour constamment et l'autre non.
Il faut donc mettre à jour le second fichier, et mon outil PHP me permettrait de mettre à jour le CSV ...
Voila

Posté : 01 déc. 2008, 23:57
par Sékiltoyai
Le contenu n'est donc pas censé être strictement le même ?
Et je suppose aussi que les enregistrements ne sont pas dans le même ordre ?

Posté : 02 déc. 2008, 00:26
par uspy62
Non les enregistrements n'ont pas le même ordre, ils n'ont même pas les même nom de colonne ...
Bref je dois comparer ces deux fichiers CSV, mais bon 20 000 lignes à comparer en PHP, c'est pas possible je pense, ça va ramer.

Posté : 02 déc. 2008, 01:23
par Sékiltoyai
Oui, en effet, parce que cela ne veut pas dire 20 000 lectures, cela veut dire 20 000 * 20 000 lectures.
J'aurais donc tendance à te conseiller d'étudier la solution suivante :
Le fichier qui ne bouge pas, tu l'entres dans une base de données. Le second, deux solutions :
- Soit tu dois effectuer le traitement peu souvent (une fois par heure, ou à la rigueur une fois toutes les 10 minutes), et du coup tu peux le rentrer en base à chaque fois.
- Soit à chaque fois que tu récupères le fichier, il n'a pas beaucoup changé, et tu peux étudier l'utilisation d'un différentiel entre les deux fichiers (attention, je ne sais pas ce que cela donne niveau performances), on verra après si tu es intéressé.

Tu alimentes alors une nouvelle table. Tu utilises des requêtes SQL pour comparer les deux. Avec des index bien faits, tu peux améliorer substanciellement la complexité algorithmique (performance) de tes opérations.

Après, détail technique, comment entrer un fichier CSV en base, tu peux aller voir du côté de la requête LOAD DATA FROM FILE.

Posté : 02 déc. 2008, 10:27
par uspy62
Oui ba en fait ce que j'ai commencé à faire, c'est un peu ça, j'importe mon premier fichier csv dans ma bdd, ensuite mon second, et ensuite je lance une comparaison avec un algorithme de poids ...
Si le champ "titre" par exemple est quasiment égal des deux côtés, je mets un poids assez fort, et pareil pour tous les autres champs, à la fin si le poids est maximum, la ligne n'a pas changé, si il est fort la ligne a changé, si il est nul la ligne a été supprimée...

Voila, je vais tester la comparaison en sql aujourdhui, je te dirai si ça prend du temps ou pas.