Help script perl comparaison de deux fichiers

Profil bloqué -  
 Profil bloqué -
Bonjour,

je dois faire un script pour comparer deux fichier et je ne sais pas vraiment comment mi prendre..

fic1 du style

test robert anna jaques cyril
sb001 aa bb cc aa
sb002 aa cc bb uu
sb003 aa uu cc bb

fic 2 du style

test anais roberta jaques nicolas
sb002 aa cc -- uu
sb008 aa cc bb uu
sb009 aa cc bb uu

pour le -- c'est une donnée manquante

en faite je dois comparer les deux fichiers

en gros il doit ressortir un fichier3

comme celui la

test robert anna jaques cyril anais roberta nicolas
sb001 aa bb cc aa -- -- --
sb002 aa cc bb uu aa cc -- uu
sb003 aa uu cc bb -- -- --
sb008 -- -- bb -- aa cc uu
sb009 -- --bb -- aa cc uu

pour resumer le fichier 3
on fusionne les données redondante exemple pour jaques qui est dans les deux fichiers
et on fusionne les données pour les test redondant comme sb002 dans l'exemple

merci si vous avez des pistes pour m'aider je rames...
ouverture de fichier, lecture c'est bon c'est pour la comparaison et l'envoie sur un fichier3

A voir également:

2 réponses


 
Salut nosuperman,

Voilà des pistes :-)

Avec le premier fichier, tu mets dans un hash les données à partir de la 2ème ligne, avec les données de la colonne 1 ("sb001", etc.) en tant que clef et le reste de la ligne en tant que valeur.

Tu utilises une expression rationnelle telle que celle qui suit pour capturer d'une part les données contenues dans ta 1ère colonne et d'autre part le reste de la ligne.

(^sb[0-9]+) (.*)$

Avec le 2ème fichier, tu vérifies si la donnée de la 1ère colonne correspond à une clef existante :
- si oui, tu modifies le contenu de la valeur qui lui est affectée en concaténant la valeur existante avec le reste de la ligne nouvellement capturée séparé par un espace ;
- si non, tu crées une nouvelle clef pour la donnée de la 1ère colonne nouvellement capturée avec le reste de la ligne nouvellement capturé en tant que valeur, avec des tirets devant.

Tu fais une itération sur le hash pour vérifier ceux qui n'ont pas été complétés, et tu ajoutes des tirets à la suite. Par exemple, en traitant les valeurs de hash qui ne correspondent pas à l'expression suivante représentant une ligne complétée :

(^sb[0-9]+) (.*) (.*) (.*) (.*) (.*) (.*) (.*)$

Puis tu affiches ta 1ère ligne et tu fais une itération sur le hash en le triant par ordre alphabétique des clefs, pour afficher clefs et valeurs.

Bon courage.


Dal
0
Profil bloqué
 
merci vraiment je ne connais pas trop la syntaxe pour le hash mais je vais chercher parce que lu on dirai que c'est facil lol :) j'espere que ca va marcher
Facebook: (supprimé par la modération)
0