Comparer et trier
Fermé
romain
-
27 sept. 2013 à 15:45
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 - 27 sept. 2013 à 19:16
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 - 27 sept. 2013 à 19:16
A voir également:
- Comparer et trier
- Excel trier par ordre croissant chiffre - Guide
- Application gratuite pour trier les photos - Guide
- Gmail trier par expéditeur - Guide
- Comparer prix amazon - Accueil - Commerce
- Excel trier par date ne fonctionne pas ✓ - Forum Excel
2 réponses
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
27 sept. 2013 à 17:31
27 sept. 2013 à 17:31
le "prénom" dont tu parles n'est pas "popo" ?
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
Modifié par [Dal] le 27/09/2013 à 18:55
Modifié par [Dal] le 27/09/2013 à 18:55
Salut romain,
Tu peux faire cela assez simplement avec Perl, en :
- mettant chaque terme extrait des lignes de fichier 2 dans un hash dont la clef est chaque terme "Prenom1", "Prenom2", etc.
- en capturant dans chaque ligne du fichier 1 l'endroit où se trouve le "Prenom", avec la regexp suivante :
- et en vérifiant si la clef existe ou pas dans le hash pour déterminer, et envoyer la ligne vers le fichier comportant les données extraites si elle existe
La regexp ci-dessus suppose que ce soit bien "Prenom1", et non pas "popo" que tu veuilles matcher dans :
Dal
Tu peux faire cela assez simplement avec Perl, en :
- mettant chaque terme extrait des lignes de fichier 2 dans un hash dont la clef est chaque terme "Prenom1", "Prenom2", etc.
- en capturant dans chaque ligne du fichier 1 l'endroit où se trouve le "Prenom", avec la regexp suivante :
/.+?:.+?\/.+?\\(.+?)=.+/
- et en vérifiant si la clef existe ou pas dans le hash pour déterminer, et envoyer la ligne vers le fichier comportant les données extraites si elle existe
La regexp ci-dessus suppose que ce soit bien "Prenom1", et non pas "popo" que tu veuilles matcher dans :
toto:Tata/tutu\Prenom1=popoet que les caractères : / \ = soient des caractères séparateurs sur lesquels on peut se baser et qu'ils ne se retrouvent pas dans les champs, et que ces champs comportent au moins un caractère.
Dal
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
Modifié par [Dal] le 27/09/2013 à 19:20
Modifié par [Dal] le 27/09/2013 à 19:20
Comme cela, par exemple :
ce qui donne, sur ton exemple :
Dal
#!/usr/bin/perl
use strict;
use warnings;
open FILE2, "fichier2.txt" or die;
my %hash;
while (my $prenom=<FILE2>) {
chomp($prenom);
$hash{$prenom} = 1;
}
open FILE1, "fichier1.txt" or die;
while(<FILE1>) {
if (/.+?:.+?\/.+?\\(.+?)=.+/) {
if ($hash{$1}) {
print $_;
}
} else {
print "Erreur de format, ligne numéro $. : $_\n";
exit;
}
}
ce qui donne, sur ton exemple :
toto:Tata/tutu\Prenom1=popo
youyou:Toto/titi\Prenom3=popo
Dal