annotate lib/list2tab.pl @ 3:17ce4f3bffa2 default tip

Uploaded
author jesse-erdmann
date Tue, 24 Jan 2012 18:33:41 -0500
parents 1437a2df99c0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
1 #!/usr/bin/perl
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
2 # The Missing Textutils, Ondrej Bojar, obo@cuni.cz
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
3 # http://www.cuni.cz/~obo/textutils
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
4 #
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
5 # 'list2tab' builds a 2D table out of key-key-value triples.
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
6 #
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
7 # $Id: list2tab,v 1.4 2006/07/07 15:01:53 bojar Exp $
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
8 #
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
9
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
10 $rows = shift;
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
11 $cols = shift;
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
12 $data = shift;
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
13 $blankvalue = shift;
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
14 @rows = split /,/, $rows;
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
15 @cols = split /,/, $cols;
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
16 @data = split /,/, $data;
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
17
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
18 $blankvalue = "-" if $blankvalue eq "";
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
19
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
20 if (!$rows || !$cols || !$data) {
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
21 my $help = <<EOH;
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
22 Sample usage:
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
23 ./list2tab.pl 1,2 5,6 3,4 [default_value] < datafile > tablefile
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
24 The output table will have lines labelled with values seen in columns 1 and 2,
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
25 columns labelled with values from columns 5,6 and the values in the interior of the table will come from columns 3,4.
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
26
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
27 Sample input:
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
28 GIN Praha 5
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
29 IOL Praha 20
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
30 GIN Brno 10
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
31 IOL Nova Paka 2
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
32
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
33 Output produced by: "list2tab 2 1 3 none"
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
34
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
35 GIN IOL
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
36 Brno 10 none
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
37 Nova Paka none 2
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
38 Praha 5 20
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
39 EOH
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
40 print STDERR $help;
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
41 exit $1;
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
42 }
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
43
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
44
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
45 while (<>) {
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
46 chomp;
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
47 @line = split /\t/;
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
48 $key = $val = $datum = "";
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
49 foreach $row (@rows) {
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
50 $key .= $line[$row-1]."\t";
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
51 }
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
52 chop $key;
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
53 foreach $col (@cols) {
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
54 $val .= $line[$col-1]."\t";
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
55 }
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
56 chop $val;
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
57 foreach $dat (@data) {
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
58 $datum .= $line[$dat-1]."\t";
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
59 }
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
60 chop $datum;
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
61 $datum =~ s/^ *//;
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
62 $datum =~ s/ *$//;
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
63
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
64 $table{"$key\t$val"} = $datum;
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
65 #print STDERR "Tabulka >>$key\t$val<<.....$datum\n";
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
66 $keys{$key} = 1;
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
67 push @svals, $val if (!$vals{$val});
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
68 $vals{$val} = 1;
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
69 }
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
70
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
71 @skeys = sort {uc($a) cmp uc($b)} keys %keys;
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
72 #@svals = sort {uc($a) cmp uc($b)} keys %vals;
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
73
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
74 #print STDERR "Klice: ".join(",",@skeys)."\n";
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
75 #print STDERR "Hodnoty: ".join(",",@svals)."\n";
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
76
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
77
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
78 print "\t" x $#rows;
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
79
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
80 foreach $col (@svals) {
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
81 print "\t$col";
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
82 }
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
83 print "\n";
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
84
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
85 foreach $row (@skeys) {
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
86 print "$row";
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
87 foreach $col (@svals) {
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
88 $pos = "$row\t$col";
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
89 print "\t$table{$pos}" if defined $table{$pos};
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
90 print "\t$blankvalue" if ! defined $table{$pos};
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
91 }
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
92 print "\n";
1437a2df99c0 Uploaded
jesse-erdmann
parents:
diff changeset
93 }