user2079828
user2079828

Reputation: 655

Aligning file output with "\t"

I have an assignment that requires me to print out some sorted lists and delimit the fields by '\t'. I've finished the assignment but I cannot seem to get all the fields to line up with just the tab character. Some of the output is below, names that are over a certain length break the fields. How can I still use '\t' and get everything aligned by only that much space?

open(DOB, ">dob.txt") || die "cannot open $!";

# Output name and DOB, sorted by month
foreach my $key (sort {$month{$a} <=> $month{$b}} keys %month)  
{ 
    my @fullName = split(/ /, $namelist{$key});
    print DOB "$fullName[1], $fullName[0]\t$doblist{$key}\n";
}
close(DOB);

Current output:

Santiago, Jose   1/5/58
Pinhead, Zippy   1/1/67
Neal, Jesse      2/3/36
Gutierrez, Paco  2/28/53
Sailor, Popeye   3/19/35
Corder, Norma    3/28/45
Kirstin, Lesley  4/22/62
Fardbarkle, Fred             4/12/23

Upvotes: 1

Views: 921

Answers (1)

Matthew Franglen
Matthew Franglen

Reputation: 4532

You need to know how many spaces are equivalent to a tab. Then you can work out how many tabs are covered by each entry.

If tabs take 4 spaces then the following code works:

$TAB_SPACE = 4;
$NUM_TABS  = 4;
foreach my $key (sort {$month{$a} <=> $month{$b}} keys %month) {
    my @fullName = split(/ /, $namelist{$key});
    my $name = "$fullName[1], $fullName[0]";

    # This rounds down, but that just means you need a partial tab
    my $covered_tabs = int(length($name) / $TAB_SPACE);

    print $name . ("\t" x ($NUM_TABS - $covered_tabs)) . $doblist{$key}\n";
}

You need to know how many tabs to pad out to, but you could work that out in a very similar way to actually printing the lines.

Upvotes: 2

Related Questions