gpt4 book ai didi

arrays - Perl:从数组中打开文件并逐一读取

转载 作者:行者123 更新时间:2023-12-02 08:28:35 25 4
gpt4 key购买 nike

我有一个 Perl 数组,如下所示:

 my @dynfiles = ('dyn.abc.transcript', 'dyn.def.transcript', 'dyn.ghi.transcript', 'dyn.jkl.transcript');

我正在尝试打开这些文件并一一阅读它们。为此,我有一个如下所示的代码:

foreach my $dynfile (@dynfiles) {
print "$dynfile\n";
open my $fh , '<', $dynfile or die "Could not open file\n";
my %data;
$data{$dynfile} = do {
local $/ = undef;
while (my $line = <$fh>) {
chomp $line;
if ($line =~ m/Errors:\s+0/) {
print "Dyn run status: PASS\n";
} else {
print "Dyn Run status : FAIL\n";
}
}
close $fh;
}
}

我得到这个错误作为输出:

dyn.bxt.transcript
Dyn run status: FAIL
dyn.cnl.transcript
17:25:19 : -E- Could not open dyn.cnl.transcript

所以我担心它根本不读取数组中的文件。另外,这个文件 dyn.bxt.transcript 中有这个字符串 Errors : 0 ,但我仍然得到 Dyn run status: FAIL输出。我在这里做错了什么吗?我正在使用简单的模式匹配,不确定问题出在哪里..请帮忙。

提前致谢!

最佳答案

在查看阅读代码并在聊天中进行调试后,我可能会选择这样的内容:

sub dynamo_check {

opendir(my $dh, $log_file) or die "can't opendir $log_file: $!";
my @dynfiles = grep { /^dynamo.*transcript$/ && -f "$log_file/$_" } readdir($dh);
close $dh;

foreach my $dynamofile (@dynfiles) {
print "Checking file: $dynamofile\n";

open my $fh, '<', $log_file . $dynamofile or die "$!\n";

my $passed = 0;

while(my $line = <$fh>) {
if ($line =~ m/Errors\s*:\s*0/i) {
$passed = 1;
last;
}
}
if ( $passed == 1 ) {
print "Dynamo run status: PASS\n";
$data{$dynamofile} = "pass";
}else {
print "Dynamo run status: FAIL\n";
$data{$dynamofile} = "fail";
}
}
print Dumper(\%data);
}

变更摘要:

  • 添加 $! 以获得更好的错误消息作为 perlvar 中的引用
  • 使用grepreaddir找到您想要读取的文件,而不是对其进行硬编码。
  • 打开文件时在文件名前面添加目录路径。
  • 删除 do block ;
  • %data 中的值设置为 passfail
  • 无需使用chomp在这里。
  • 不需要设置local $/= undef;,我们可以一行一行地遍历这些行,并使用 last 跳出 while 循环。当我们找到 Errors 行时。

关于arrays - Perl:从数组中打开文件并逐一读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29044206/

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