[PERL] recherche de contenu avec comparaison

Résolu/Fermé
snowsurfer69 Messages postés 10 Date d'inscription vendredi 15 juin 2007 Statut Membre Dernière intervention 26 juillet 2007 - 25 juin 2007 à 16:36
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 26 juin 2007 à 12:25
Bonjour a tous!

Voila je suis debutant en Perl et me voila face a un problème disons peut ètre plutot d'algorithmie.
ceci dit les faits sont la : je suis dans l'impasse :

mon problème :
Je possède 2 fichiers textes contenant tout deux des bilans d'arborescances.
chaque ligne concernant un des fichier/dossier de l'arborescance .
cela donne par example :

U:/perl/dossier1
U:/perl/dossier1/Dossier 21
U:/perl/dossier1/Dossier 21/Thumbs.db = 17408
U:/perl/dossier1/Dossier 21/tournoi pétanque 17juin 001.jpg = 36592
U:/perl/dossier1/Dossier 21/tournoi pétanque 17juin 003.jpg = 66215
U:/perl/dossier1/Dossier 21/tournoi pétanque 17juin 005.jpg = 46314
U:/perl/dossier1/Dossier 21/tournoi pétanque 17juin 007.jpg = 48875
U:/perl/dossier1/Dossier 22
U:/perl/dossier1/Dossier 22/Didier.zip = 269679061
U:/perl/dossier1/Dossier 22/Dossier 31
U:/perl/dossier1/Dossier 22/Dossier 31/Thumbs.db = 14848
U:/perl/dossier1/Dossier 22/Dossier 31/tournoi pétanque 17juin 002.jpg = 50077
U:/perl/dossier1/Dossier 22/Dossier 31/tournoi pétanque 17juin 006.jpg = 45269

mon programme génère ce type de fichies chaque jour
le but étant de comparer entre les 2 fichiers soit :

-l'existance a J-1 et pas a J d'une des ligne du fichier ce qui reviendrait a dire que le fichier a été supprime entre-temps
-l'existance a J et pas a J-1 d'une des lignes du fichier ce qui reviendraita dire que le fichier a été cree entre-temps.

voila a quoi ressemble mon code pour le moment :

##################################################
sub testcree
{
our $testcree = 0;
for ($i=0 ; $i <= $#tab2 ; $i++)
{
chomp(@tab2[$i]);#retire le dernier caractère de la chaine; ici le "\n"; pour permettre la comparaison de chaines.
$testcree = 0;
for($j=0;$j<$#tab;$j++)
{
if($tab2[$i] eq @tab[$j])
{
$testcree = 1;
}
}
if($testcree == 0)
{
print "CREE : @tab2[$i]";
print EVO "CREE : @tab2[$i]";
}
}
}
#########################################################

ceci étant la dernière de mes nombreuses tentatives!!!

voila si quelqu'un peut m'aider a y voir plus clair je lui en serait reconnaissant!!!
merci!!!

4 réponses

lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
25 juin 2007 à 16:44
Salut,

tu pouvais continuer dans le 1er thread
si je me rappelle bien tu travailles sous windows

donne les 2 fichiers pour voir
utilise cjoint.com

mon programme génère ce type de fichies chaque jour
le but étant de comparer entre les 2 fichiers soit :


Donc si je comprends bien tu as 2 fichiers par jour?
alors c'est quoi l'histoire de J et J-1?

Je crois que mieux sera de montre un cas concret

Les deux fichiers que tu compares et le résultat que tu veux obtenir.

0
snowsurfer69 Messages postés 10 Date d'inscription vendredi 15 juin 2007 Statut Membre Dernière intervention 26 juillet 2007
26 juin 2007 à 09:12
Bonjour!

voila mes 2 fichiers :

J : https://www.cjoint.com/?gAjdc4pDDZ
J-1 : https://www.cjoint.com/?gAjd1cAtqo

non je n'ait pas 2 fichiers par jour, j'UTILISE 2 fichiers par jours.

je compare le fichier du jour : J avec le fichier du jour precedent J-1 de manière a detecter quels dossiers ou fichiers sont nouveaux ou n'existent plus.

je voudrais donc tester la presence ou non de certaines lignes contenues dans J et pas dans J-1 ou d'autres contenues dans J-1 et pas dans J pour determiner l'évolution de mon arborescance: les fichiers nouveaux ou supprimés.

voila j'éspère que mon explication reste claire, meme si ce n'est pas vraiment complique c'est vrai qu'il est difficile de s'y retrouver.

merci pour l'aide
A+.
0
snowsurfer69 Messages postés 10 Date d'inscription vendredi 15 juin 2007 Statut Membre Dernière intervention 26 juillet 2007
26 juin 2007 à 09:57
REBONJOUR!!

voila il est 10h00 et je viens de trouver la solution a mon problème.
apres 2jours de recherche et 5 pages de brouillons voila ma solution :


sub testcree
{
our $testcree = 0;
for ($i=0 ; $i <= $#tab2 ; $i++)
{
$testcree = 0;
for($j=0 ; $j < $#tab ; $j++)
{
if(@tab2[$i] eq @tab[$j])
{
$testcree = 1;
}
}
if($testcree == 0)
{
print "CREE : @tab2[$i]";
print EVO "CREE : @tab2[$i]";
}
}
}

Certe d'une simplicitée redoutable mais pour moi debutant c'était un vrai problème.
c'est surtout au niveau du raisonnement que je n'y arrivait pas et non au niveau de l'utilisation des fonctions.
j'éspère que mon poste n'était pas déplacé lol.

Merci a Lami20j pour ses réponses rapides ça fait plaisir de se sentir aidé!
A+.
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
26 juin 2007 à 12:25
Salut,

de rien.

Pour s'amuser je vais tester chez moi et je vais te donner une solution en utilisant l'idiome Perl et pas celuis de C que tu as utilisé :-))

Ca sera sympa pour toi de faire des petits scripts pour obtenir : l'intersection, la réunion, la différence des tableaux ainsi que de trouver les éléments qui sont en A et pas en B

Bonne continuation.
0