[PERL] extraction de données d'un fichier txt
Fermé
KsPeR
-
22 mars 2008 à 01:18
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 22 mars 2008 à 08:29
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 22 mars 2008 à 08:29
A voir également:
- [PERL] extraction de données d'un fichier txt
- Fichier rar - Guide
- Fichier host - Guide
- Fichier iso - Guide
- Téléchargez cette archive (dossier compressé). en extraire tous les fichiers dans un dossier local. quel fichier contient l’expression trouverpix ? ✓ - Forum Windows
- Comment réduire la taille d'un fichier - Guide
1 réponse
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 566
22 mars 2008 à 08:29
22 mars 2008 à 08:29
Salut,
tu ne devrais pas avoir ça
"nom A" -- "nom B" [label="34"];
si j'ai bien compris pour chaque combaison tu dois avoir les éléments communs comma label
dans B tu n'as pas 34
voici ce que ça donne
Par exemple si je met un 34 au lieu de 4 pour B j'obtiens
tu ne devrais pas avoir ça
"nom A" -- "nom B" [label="34"];
si j'ai bien compris pour chaque combaison tu dois avoir les éléments communs comma label
dans B tu n'as pas 34
voici ce que ça donne
#!/usr/bin/perl
use strict;use warnings;
my (@g,%h);
while(<DATA>){
my ($c,$v,@tmp,@unique,%vu);
($c,$v) = $_ =~ /^(nom\s*[A-Z])\s*(.*)/;
@tmp = split /\s+/,$v;
@unique = grep { !$vu{$_}++ } @tmp;
push @{$h{$c}},@unique;
}
@g=sort keys %h;
print "graph G {\n";
while (@g){
my ($e,$k,$x,$z,%intersect,%union);
$k = shift @g;
for(@g){
for $x(@{$h{$k}},@{$h{$_}}) { $union{$x}++ && $intersect{$x}++ };
my @val = sort keys %intersect;
for $z(@val){print " \"$k\"-\"$_\" [label=\"$z\"];\n" if $z};
for $e(keys %union) {delete $union{$e}};
for $e(keys %intersect){delete $intersect{$e}};
}
}
print "};\n";
__END__
nom A 2 12 34
nom B 4 56 78 78 9
nom C 3 34 9 12
nom D 1 12
et le résultat de l'exécutionlami20j@debian:~/trash$ perl graph.pl
graph G {
"nom A"-"nom C" [label="12"];
"nom A"-"nom C" [label="34"];
"nom A"-"nom D" [label="12"];
"nom B"-"nom C" [label="9"];
"nom C"-"nom D" [label="12"];
};
lami20j@debian:~/trash$
Par exemple si je met un 34 au lieu de 4 pour B j'obtiens
lami20j@debian:~/trash$ perl graph.pl
graph G {
"nom A"-"nom B" [label="34"];
"nom A"-"nom C" [label="12"];
"nom A"-"nom C" [label="34"];
"nom A"-"nom D" [label="12"];
"nom B"-"nom C" [label="34"];
"nom B"-"nom C" [label="9"];
"nom C"-"nom D" [label="12"];
};