Hi, I need convert 'associated lists' into a matrices that is accumulative of integers.
Please help! I have searched high and dry and could not find a solution. Its making my hair fall out this week..
id1 id2 int
208 10000 1
208 10000 7
207 10000 3
8517 1147 1
3551 1147 2
id1\id2 1147 10000
207 0 3
208 0 8
3551 1 0
8517 1 2
RESOLVED
RESOLVED
RESOLVED
20x20-NMS parsers # cat list2
d1 id2 int
HAT KNIFE 1
HAT KNIFE 7
BALL KNIFE 3
CAT CLOTH 1
DOG CLOTH 2
20x20-NMS parsers # cat test2.list | perl test2.pl
$matrix{CAT}{CLOTH} = 1
$matrix{DOG}{CLOTH} = 2
$matrix{HAT}{KNIFE} = 8
$matrix{BALL}{KNIFE} = 3
Delete Ball
$matrix{CAT}{CLOTH} = 1
$matrix{DOG}{CLOTH} = 2
$matrix{HAT}{KNIFE} = 8
Match the letter "O"
DOG
yep, HAT is there!
Print Matrix
CLOTH KNIFE
CAT 1 0
DOG 2 0
HAT 0 8
Done!
my %matrix;
while (<>) {
my ($id1, $id2, $int) = split;
$matrix{$id1}{$id2} += $int;
}
foreach $key1 (keys %matrix) {
foreach $key2 (keys %{%matrix->{$key1}}) {
print "\$matrix{$key1}{$key2} = $matrix{$key1}{$key2}
+";
}
print"\n";
}
# delete key
print "Delete Ball\n"; delete ($matrix{"BALL"});
foreach $key1 (keys %matrix) {
foreach $key2 (keys %{%matrix->{$key1}}) {
print "\$matrix{$key1}{$key2} = $matrix{$key1}{$key2} ";
}
print"\n";
}
# Match
print "Match the letter \"O\"\n";
foreach $key1 (keys %matrix) {
foreach $key2 (keys %{%matrix->{$key1}}) {
@match = grep (/O/i, $key1);
print "@match";
}
print"\n";
}
# check for key existence
if (exists($matrix{"HAT"}))
{
print "yep, HAT is there!\n";
}
# Print Matrix
print "Print Matrix\n";
my @down = keys %matrix;
my @across = do {my %s; grep {!$s{$_}++} map {keys %$_} values %matrix
+};
my $l = 0;
$l < length ($_) and $l = length $_ for @down, @across;
print " " x $l;
printf " %-${l}s", $_ for @across;
print "\n";
foreach my $d (@down) {
printf "%-${l}s", $d;
printf " %${l}d", $matrix{$d}{$_} || 0 for @across;
print "\n";
}
print"Done!\n";
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
Read Where should I post X? if you're not absolutely sure you're posting in the right place.
Please read these before you post! —
Posts may use any of the Perl Monks Approved HTML tags:
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
| |
For: |
|
Use: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.