gpt4 book ai didi

perl - 读取固定宽度数据时保留空白列并添加分隔符

转载 作者:行者123 更新时间:2023-12-03 23:58:38 24 4
gpt4 key购买 nike

我正在解析一个文件。

文件格式如下:


Column1 Column2 Column3 Column4 Column5
1 2 3 4 5
6 7 8 9
10 11 12 14
15 16 17 18

某些列是空的。所以我正在读取两个具有与上述相同格式的文件并合并两个文件并添加“|”在每一列之间,所以它应该看起来像这样:


Column1 | Column2 | Column3 | Column4 | Column5
1 | 2 | 3 | 4 | 5
6 | 7 | | 8 | 9
10 | 11 | 12 | | 14
| 15 | 16 | 17 | 18

但我越来越像这样了。列中的空格被删除。


Column1 | Column2 | Column3 | Column4 | Column5
1 | 2 | 3 | 4 | 5
6 | 7 | 8 | 9
10 | 11 | 12 | 14
15 | 16 | 17 | 18

代码部分:

while(<FH>){
my @lines =split ' ',$_;
say (join '|',@lines);
}

我知道这是因为我用空格分隔符分割。谁能告诉我如何获得所需的输出?

最佳答案

您可以使用 unpack解析固定宽度的数据。模板中的 A9 假定您的列是 9 个字符宽。您可以使用sprintf将数据再次分隔到原始宽度的列中。

use warnings;
use strict;

while (<DATA>) {
chomp;
printf "%s\n", join '| ', map { sprintf '%-8s', $_ } unpack 'A9' x 5, $_;
}

__DATA__
Column1 Column2 Column3 Column4 Column5
1 2 3 4 5
6 7 8 9
10 11 12 14
15 16 17 18

打印出来:

Column1 | Column2 | Column3 | Column4 | Column5 
1 | 2 | 3 | 4 | 5
6 | 7 | | 8 | 9
10 | 11 | 12 | | 14
| 15 | 16 | 17 | 18

关于perl - 读取固定宽度数据时保留空白列并添加分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65864154/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com