gpt4 book ai didi

perl - 格式化哈希内容以生成报告

转载 作者:行者123 更新时间:2023-12-05 08:49:39 26 4
gpt4 key购买 nike

我有一个散列,其中包含如下数据:

my %hash = (
'150' => {
'priority' => 'High',
'node' => 'Node1',
'delta' => '00:05:00'
},
'170' => {
'delta' => '00:00:30',
'node' => 'Node2',
'priority' => 'Medium'
}
);

我正在使用 foreach 循环迭代它并生成报告 (.txt) 文件。

所以,我需要的格式如下:

EVENTID              NODE                 DELTA                PRIORITY
-------------------- -------------------- -------------------- --------------------
150 Node1 00:05:00 High
170 Node2 00:00:30 Medium

下面是我的格式化结果的脚本:

...
...
open(my $fh, '>', "report_file.txt") or die "Cannot open a file : $!";

printf $fh("%-20s %-20s %-20s %-20s\n", 'EVENTID', 'NODE', 'DELTA', 'PRIORITY');
printf $fh("%-20s %-20s %-20s %-20s\n", '-'x20, '-'x20, '-'x20, '-'x20);

foreach my $key (sort keys %hash){
printf $fh("%-20s %-20s %-20s %-20s\n", $key, $hash{$key}{'node'},$hash{$key}{'delta'},$hash{$key}{'priority'});
}
close $fh;

print "END\n";

它按预期给我报告,但想确认它是否正确?因为我在这里硬编码空格(-20s)。还提到了用作标题下划线的破折号 (-),例如 '-'x20

这是一个好的方法还是我们有任何替代方法来完成这个(任何预定义的 Perl 模块)?

最佳答案

Perl 为数据输出提供了格式,它最适合您的目标

use strict;
use warnings;

my %events = (
'150' => {
'priority' => 'High',
'node' => 'Node1',
'delta' => '00:05:00'
},
'170' => {
'delta' => '00:00:30',
'node' => 'Node2',
'priority' => 'Medium'
}
);

$^ = "STDOUT_TOP";

my($event,$priority,$node,$delta);

for $event (sort keys %events) {
($node,$delta,$priority) = @{$events{$event}}{qw/node delta priority/};
write;
}

format STDOUT_TOP =
EVENTID NODE DELTA PRIORITY
-------------------- -------------------- -------------------- --------------------
.

format STDOUT =
@<<<< @<<<<<<<<<<< @<<<<<<<<<<< @<<<<<<<<<<<
$event,$node,$delta,$priority
.

输出

EVENTID              NODE                 DELTA                PRIORITY
-------------------- -------------------- -------------------- --------------------
150 Node1 00:05:00 High
170 Node2 00:00:30 Medium

附录:以下代码演示了如何使用格式将输出写入文件

use strict;
use warnings;

my %events = (
'150' => {
'priority' => 'High',
'node' => 'Node1',
'delta' => '00:05:00'
},
'170' => {
'delta' => '00:00:30',
'node' => 'Node2',
'priority' => 'Medium'
}
);

my $fname = 'hash_events.txt';

open FILE, '>', $fname
or die "Couldn't open $fname: $!";

select(FILE);

$^ = "FILE_TOP";

my($event,$priority,$node,$delta);

for $event (keys %events) {
($node,$delta,$priority) = @{$events{$event}}{qw/node delta priority/};
write;
}

close FILE;

format FILE_TOP =
EVENTID NODE DELTA PRIORITY
-------------------- -------------------- -------------------- --------------------
.

format FILE =
@<<<< @<<<<<<<<<<< @<<<<<<<<<<< @<<<<<<<<<<<
$event,$node,$delta,$priority
.

参见 perlform , Perl formats

关于perl - 格式化哈希内容以生成报告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63585135/

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