in reply to Need help in Text::Table

Basically your data contains extra newlines, if you employ the Basic debugging checklist, perhaps like this

use Data::Dump qw/ dd /; dd [ $hash{"Name"},$hash{"Age"},$hash{"Dept"} ];

You should be able to see where the extra newlines are. Here is an example

#!/usr/bin/perl -- use strict; use warnings; use Text::Table; my $tb = Text::Table->new( "NAME\n-------------------------", "Age\n-------------------------", "Department\n-------------------------" ); $tb->load( [ qw/ Ro Sham Bo / ]); $tb->load( [ "\nRo", "\nSham", "\nBo" ]); $tb->load( [ qw/ Ro Sham Bo / ]); print $tb; __END__ NAME Age Department + ------------------------- ------------------------- ------------------ +------- Ro Sham Bo + + Ro Sham Bo + Ro Sham Bo

More importantly, you should read perlvar#$' and stop using $';

Review perlintro and perlrequick and start using http://perldoc.perl.org/perlintro.html#Parentheses-for-capturing

$Employee{Name} = $1 if /^The employee name is : (\S+)$/mgsi; $Employee{Age} = $1 if /^Age: (\d+) years$/mgsi; $Employee{Department} = $1 if /^Department: (.+?)\s*$/mgsi; if( /^\s*$/ ){ $tb->load ...; undef %Employee; }

Replies are listed 'Best First'.
Re^2: Need help in Text::Table
by Anonymous Monk on Jun 14, 2012 at 10:47 UTC

    Actually, there are no extra newlines :) but you did solve the problem implicitly -- load-ing the data only once %Employee is complete (when you encounter a blank line), not as soon as one attribute was found

    If the files don't end with a blank line, you should load %Employee one last time, if its not empty of course :)

Re^2: Need help in Text::Table
by ckj (Chaplain) on Jun 14, 2012 at 09:18 UTC
    I followed your links too but this problem is still unsolved. UPDATE: here is the modified code which is also not working
    #!/usr/lib/perl use DBI; use strict; use Text::Table; my ($dir,@files,$file,$output_file,$line,%Employee); $dir="D:/ckj/dummy"; chomp($dir); $output_file="D:/ckj/dummy/rep.txt"; opendir(DIR,"$dir") or die $!; @files=readdir(DIR) or die $!; close DIR; my $tb = Text::Table->new("NAME\n-------", "Age\n-------", "Department +\n-------"); open(FH1,">$output_file") or die $!; foreach $file (@files){ open(FH, "<$dir/$file") or die $! if($file=~/\.txt$/); while($line=<FH>){ while($line=~/employee name is \: (.*?)\n/g){ $Employee{"Name"}=$1; } while($line=~/Age\: (.*?)\n/g){ $Employee{"Age"}=$1; } while($line=~/Department\: (.*?)\n/g){ $Employee{"Dept"}=$1; } #$tb->load([$Employee{"Name"},$Employee{"Age"},$Employee{"Dep +t"}]); if( /^\s*$/ ){ $tb->load([$Employee{"Name"},$Employee{"Age"},$Employee{" +Dept"}]); undef %Employee; } } close FH; } print FH1 $tb; close FH1; print "Congratulations, report file has been saved as $output_file";
    O/p is like this:
    NAME Age Department ------- ------- ------- Ram 25 years HR Ravi 28 years HR
    UPDATE: It's done by using :
    if($Employee{"Name"} && $Employee{"Age"} && $Employee{"Dept"}){ $tb->load([$Employee{"Name"},$Employee{"Age"},$Employee{" +Dept"}]); undef %Employee; }

      Still confused and couldn't solve this one. Any whelp will be appreciated. I foolowed your links too but this problem is still unsolved.

      What is is that you're confused about?

      I told you how to diagnose the problem (code ready for you to copy/paste and examine the output)

      I told you how to solve it (that %Employee hash stuff), I even posted code for you to copy/paste, all you have to do is finish the missing portion, the ... stuff

      what is the problem?

      UPDATE: here is the modified code which is also not working

      Those be forbidden words :) you need to describe how its not working

      O/p is like this

      You should also put that in code tags, or better yet, put the output of  dd \%Employee; (from before undef) and/or  dd $tb; (from before print FH1 ), in code tags

      Have you made any more changes, or are you just waiting?