GNT sans publicité, site mobile, fonctionnalitées exclusives...

Comparaison de fichiers - choix langage de programmation

Le
Tittom
Bonjour,

J'ai besoin d'un outil de comparaison de fichiers, mais ces besoins
étant très spécifiques et précis, je n'ai pas trouvé mon bonheur
parmis les outils existants que j'ai trouvé, aussi je pense créer le
mien.

(Pour les curieux qui voudraient voir un exemple de ce que j'attends de
mon outil, c'est consultable en bas de la page suivante :
http://www.tittom.net/developpement/CompareFiles/ )

Jusqu'à présent, j'ai prototypé un truc qui marche pas mal du tout,
avec l'aide de :
- awk pour la routine de comparaison
- sort pour trier les fichiers selon les clés
- du shell pour encapsuler et enchaîner tout ça

Je n'ai pas une large connaissance des outils de développement unix,
aussi j'ai peur d'en arriver à utiliser une fourchette pour couper du
pain, ou un char d'assaut pour écraser un moustique, si vous voyez ce
que je veux dire :)

J'aimerais donc avoir des conseils quant au langage de développement
à utiliser (perl ? c ? shell ? autres ?), alors j'indique ci-dessous
les caractéristiques "cible" de mon outil.

- Comparaison de 2 fichiers texte au format CSV (ou assimilé, bref des
champs séparés par un caractère)
- Les fichiers en question peuvent avoir + de 5000 caractères par
ligne
- Les fichiers en question sont de l'ordre de 10Mo, exceptionnellement
50 ou 100Mo.
- Le principe de comparaison se rapproche d'une comparaison de tables
de bases de données : rapprochement d'enregistrements par comparaison
de clés, puis comparaison zone à zone des enregistrement communs
entre les 2 fichiers
- Production d'un rapport détaillé (format HTML ou CSV au choix)
explicitant quels écarts ont été rencontrés
- Possibilité d'ignorer certaines zones dans la comparaison, mais tout
en les affichant dans le rapport final.


Voilou, merci pour vos avis critiques !
--
Tittom
Lire les 13 réponses

Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 3
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Nicolas George
Le #678983
"Tittom" wrote in message
- Comparaison de 2 fichiers texte au format CSV (ou assimilé, bref des
champs séparés par un caractère)
- Les fichiers en question peuvent avoir + de 5000 caractères par
ligne
- Les fichiers en question sont de l'ordre de 10Mo, exceptionnellement
50 ou 100Mo.
- Le principe de comparaison se rapproche d'une comparaison de tables
de bases de données : rapprochement d'enregistrements par comparaison
de clés, puis comparaison zone à zone des enregistrement communs
entre les 2 fichiers
- Production d'un rapport détaillé (format HTML ou CSV au choix)
explicitant quels écarts ont été rencontrés
- Possibilité d'ignorer certaines zones dans la comparaison, mais tout
en les affichant dans le rapport final.


Perl me semble tout à fait adapté.

Dans tous les cas, il va falloir programmer pas mal pour permettre à
l'utilisateur de saisir ses critères.

Tittom
Le #678982
Nicolas George wrote:
Perl me semble tout à fait adapté.


Ok, peux-tu m'indiquer s'il te semble mieux adapté que awk et pourquoi
? Je voudrais être sûr de comprendre pourquoi l'un serait mieux
adapté que l'autre, ou inversement :)

Dans tous les cas, il va falloir programmer pas mal pour permettre à
l'utilisateur de saisir ses critères.


J'ai oublié de préciser que mon outil s'utilise en ligne de commande,
les critères seront définis dans des fichiers de configuration. C'est
du pur mode batch, l'objectif étant de faire comparer les fichiers par
la machine la nuit, pour analyser les résultats le jour.

Merci pour ta réponse.

Nicolas George
Le #678744
"Tittom" wrote in message
Ok, peux-tu m'indiquer s'il te semble mieux adapté que awk et pourquoi
? Je voudrais être sûr de comprendre pourquoi l'un serait mieux
adapté que l'autre, ou inversement :)


awk est extrêmement optimisé pour la tâche particulière de filtrage de
fichier ligne par ligne, et ça se ressent au niveau des structures de
contrôle, et des possibilités d'interaction explicite avec le système.

D'autre part, les structures de données sont plus limitées, en particulier
par l'absence d'un équivalent des références de perl.

J'ai oublié de préciser que mon outil s'utilise en ligne de commande,
les critères seront définis dans des fichiers de configuration. C'est
du pur mode batch, l'objectif étant de faire comparer les fichiers par
la machine la nuit, pour analyser les résultats le jour.


Même comme ça, il faut une syntaxe pour décrire les critères, et un
interpréteur pour cette syntaxe : ça ne se fera pas tout seul, à moins
d'utiliser l'interpréteur du langage lui-même.

Harpo
Le #678743
Tittom wrote:

http://www.tittom.net/developpement/CompareFiles/ )

Jusqu'à présent, j'ai prototypé un truc qui marche pas mal du tout,
avec l'aide de :
- awk pour la routine de comparaison
- sort pour trier les fichiers selon les clés
- du shell pour encapsuler et enchaîner tout ça

Je n'ai pas une large connaissance des outils de développement unix,
aussi j'ai peur d'en arriver à utiliser une fourchette pour couper du
pain, ou un char d'assaut pour écraser un moustique, si vous voyez ce
que je veux dire :)

J'aimerais donc avoir des conseils quant au langage de développement
à utiliser (perl ? c ? shell ? autres ?), alors j'indique ci-dessous
les caractéristiques "cible" de mon outil.


Perso, je n'utiliserais pas C (trop de développement) ni le shell sinon
pour servir de glu entre 2 ou 3 programmes (probablement trop coûteux
en ressources et pas vraiment adapté).
J'utiliserais un langage de script comme Ruby, je dis ça parce que
j'aime bien Ruby mais on doit faire la même chose en Perl.
Je ne connais pas assez awk pour juger, mais il me semble peu adapté, il
est principalement basé sur les expressions régulières et il n'est pas
évident que tu en aies beaucoup besoin. Un langage de script comme Ruby
et Perl donnerait plus de souplesse.
N'oublie pas de regarder la commande 'uniq', ça pourrait te servir.

Comme tu l'as remarqué, le problème peut être résolu par l'algèbre
relationnelle, créer des tables SQL serait peut-être un peu
marteau-pilon, mais regarde :
http://www.linux.it/~carlos/nosql/current-doc/NoSQL.html
Ca pourrait être une solution.

--
http://patrick.davalan.free.fr/

Tittom
Le #678742
Nicolas George wrote:
awk est extrêmement optimisé pour la tâche particulière de filtra ge de
fichier ligne par ligne, et ça se ressent au niveau des structures de
contrôle, et des possibilités d'interaction explicite avec le systè me.


Quand tu dis que "ça se ressent", c'est que les structures de
contrôle et possibilités d'interaction explicite avec le système
risquent d'induire des pb de perf, alors que ce n'est pas le cas en
perl ?

D'autre part, les structures de données sont plus limitées, en partic ulier
par l'absence d'un équivalent des références de perl.


Ca ne devrait pas me gêner beaucoup, j'ai principalement des chaines
alphanumériques.
Mais c'est une souplesse à prendre en compte en effet !

Je sens que je vais me mettre à perl :)

J'ai oublié de préciser que mon outil s'utilise en ligne de command e,
les critères seront définis dans des fichiers de configuration. C'e st
du pur mode batch, l'objectif étant de faire comparer les fichiers par
la machine la nuit, pour analyser les résultats le jour.


Même comme ça, il faut une syntaxe pour décrire les critères, et un
interpréteur pour cette syntaxe : ça ne se fera pas tout seul, à mo ins
d'utiliser l'interpréteur du langage lui-même.


Je pensais imposer une forme de ce type dans les fichiers de
configuration :
# liste des zones clé
zone1;zone2;zone3
# liste des zones à ne pas comparer
zone8;zone5

C'est à peu près tout ce dont j'ai besoin. Bref cette partie là ne
m'inquiète pas trop.

Merci encore pour tes lumières.


Publicité
Suivre les réponses
Poster une réponse
Anonyme