From 1e170369b9d99fe3ed0ea886bf0bcc93d4822142 Mon Sep 17 00:00:00 2001 From: kiran Date: Fri, 12 Mar 2010 02:31:29 +0000 Subject: [PATCH] A quick module to load up text files more easily git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@2988 348d0f76-0448-11de-a6fe-93d51630548a --- perl/DataTable.pm | 64 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 perl/DataTable.pm diff --git a/perl/DataTable.pm b/perl/DataTable.pm new file mode 100644 index 000000000..136cb3920 --- /dev/null +++ b/perl/DataTable.pm @@ -0,0 +1,64 @@ +package DataTable; + +use strict; +use vars qw($VERSION @ISA @EXPORT @EXPORT_OK); +require Exporter; + +@ISA = qw(Exporter AutoLoader); + +@EXPORT = qw( readTable ); + +use Data::Dumper; + +sub readTable { + my ($file, %overrides) = @_; + my %options = ( + 'file' => $file, + 'key' => undef, + 'header' => 0, + 'delimiter' => '\s+', + 'filter' => '#', + %overrides, + ); + + open(FILE, $options{'file'}); + + my @header = undef; + if ($options{'header'} == 1) { + chomp(my $headerline = ); + $headerline =~ s/#//g; + @header = split(/$options{'delimiter'}/, $headerline); + } elsif (ref($options{'header'}) eq 'ARRAY') { + @header = @{$options{'header'}}; + } + + chomp(my @lines = grep { $_ !~ /$options{'filter'}/ } ); + + my @table; + my %table; + for (my $lineIndex = 0; $lineIndex <= $#lines; $lineIndex++) { + my $line = $lines[$lineIndex]; + + my %fieldHash; + my @fields = split(/$options{'delimiter'}/, $line); + + for (my $fieldIndex = 0; $fieldIndex <= $#fields; $fieldIndex++) { + $fieldHash{$header[$fieldIndex]} = $fields[$fieldIndex]; + } + + $fieldHash{'_linenum'} = $lineIndex; + $fieldHash{'_line'} = $line; + + if (!defined($options{'key'})) { + push(@table, \%fieldHash); + } else { + my $key = ($options{'key'} =~ /^\d+/) ? $fields[$options{'key'}] : $fieldHash{$options{'key'}}; + + push(@{$table{$key}}, \%fieldHash); + } + } + + return (!defined($options{'key'})) ? @table : %table; +} + +1;