簡體   English   中英

Perl:Perl6::Form 格式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM