loops - 如何避免 2 个循环并将我的数据存储在 Perl 的数组中
问题描述
我有一个脚本,它会计算输入中的数据数量,DATA
并根据计数进一步进行。
下面是我的脚本,它按预期工作。
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
my (@array, @nodes);
my $count = 0;
while (<DATA>) {
push @array, $_;
$count = $1 if /Total number of data found :\s*(\d+)/;
}
print "Count:$count\n";
print "Array".Dumper(\@array);
if( $count > 0 ){
foreach my $ele(@array){
chomp $ele;
if( $ele =~ /NodeName : (\w+)/){
push @nodes, $1;
}
}
} else {
print "Count is less than 1.. Existing\n";
exit 0;
}
print Dumper(\@nodes);
__DATA__
Data : Network=R9,N=Node1
NodeName : Node1
DateTime : 05-08-2020 10:00:05
Data : Network=R9,N=Node2
NodeName : Node2
DateTime : 05-08-2020 10:00:10
Total number of data found : 2
但在这里我使用 2 个循环,while
并且foreach
.
while
用于捕获计数,并在执行操作时foreach
遍历存储的每个数据元素。@array
while
是否有可能只有 1 个循环,或者while
我for
可以在哪里获得计数,并且基于我可以NodeName
从DATA
.
解决方案
这似乎做你想做的事:
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
my @nodes;
my $count = 0;
while (<DATA>) {
chomp;
push @nodes, $1 if /NodeName : (\w+)/;
$count = $1 if /Total number of data found :\s*(\d+)/;
}
print "Count:$count\n";
if ($count <= 0) {
print "Count is less than 1.. Exiting\n";
exit 0;
}
print Dumper(\@nodes);
__DATA__
Data : Network=R9,N=Node1
NodeName : Node1
DateTime : 05-08-2020 10:00:05
Data : Network=R9,N=Node2
NodeName : Node2
DateTime : 05-08-2020 10:00:10
Total number of data found : 2
推荐阅读
- python - Python电梯代码模拟错误
- python - 用于 CPU 的 Tensorflow 1.9,没有 GPU 仍然需要 cudNN - Windows
- ruby-on-rails - 如何使用迁移文件将 DB 级别唯一约束添加到 Rails 表中的列?
- json - Postman 中 Elasticsearch 的 curl Post 语法不正确
- css - CSS 按钮悬停动画是如何工作的?
- reactjs - React Recompose 在 Props 上导致 Typescript 错误
- syntax - Visual Studio Code - 语法高亮颜色的含义
- vba - 打开工作簿时出现 VBA 错误 - 找不到那里的工作簿
- python - 为什么在 Element 上复制使 lxml.html.tostring 返回转义字符
- sql - oracle如何使用上一行的结果?