[英]Perl: Perl6::Form format
我有這樣的文件,
SR Name Rollno Class
1 Sanjay 01 B
2 Rahul_Kumar_Khanna 09 A
現在我需要添加“|” 每個之間。 所以它應該看起來像
SR | Name |Rollno | Class|
1 | Sanjay |01 | B |
2 | Rahul_Kumar_Khanna|09 | A |
我正在使用 Perl6::form
my $text;
foreach my $line (@arr) {
my ($SR, $Name, $Rollno, $Class) = split (" ", $line);
my $len = length $Name;
$text = form
'| {||||||||} | {||||||||} | {||||||||} | {||||||||}|',
$SR, $Name, $Rollno, $Class;
print $text;
}
到目前為止,我已經完成了,但名稱沒有正確出現。 我添加了額外的“|” 為此。 有什么辦法可以添加“|” 通過計算長度(如下)。 我試過,但出現錯誤。
'| {||||||||} | {||||||||}x$len | {||||||||} | {||||||||}|',
問題#1
'| {||||||||} | {||||||||}x$len | {||||||||} | {||||||||}|'
產生
| {||||||||} | {||||||||}x20 | {||||||||} | {||||||||}|
但你想得到
| {||||||||} | {||||||||||||||||||||} | {||||||||} | {||||||||}|
為此,你會想要
'| {||||||||} | {'.( "|" x $len ).'} | {||||||||} | {||||||||}|'
問題#2
$len
是當前行的 name 字段的長度。 每一行都不一樣。 這是錯誤的,因為您希望每行的輸出寬度相同。 $len
需要是最長名稱字段的長度。
在開始循環之前,您需要為$len
找到正確的值。
# Read in the data as an array of rows.
# Each row is an array of values.
my @rows = map { [ split ] } <>;
# Find the maximum width of each column.
my @col_lens = (0) x @{rows[0]};
for my $row (@rows) {
# Skip the blank line after the header.
next if !@$row;
for my $col_idx (0..$#$row) {
my $col_len = $row->[$col_idx];
if ($col_lens->[$col_idx] < $col_len) {
$col_lens->[$col_idx] = $col_len;
}
}
}
my $form =
join "",
"| ",
"{".( "|"x($col_lens[0]-2) )."}",
" | ",
"{".( "|"x($col_lens[1]-2) )."}",
" | ",
"{".( "|"x($col_lens[2]-2) )."}",
" | ",
"{".( "|"x($col_lens[3]-2) )."}",
" |";
for my $row (@rows) {
if (@$row) {
print form($form, @$row);
} else {
print "\n";
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.