[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
- Comment ouvrir un fichier epub ? - Guide
- Comment réduire la taille d'un fichier - Guide
- Ouvrir un fichier .bin - Guide
- Impossible de supprimer 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 569
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 12et le résultat de l'exécution
lami20j@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"]; };