gpt4 book ai didi

perl - 如何从 Perl 中的数组中获取最大值?

转载 作者:行者123 更新时间:2023-12-05 04:13:32 25 4
gpt4 key购买 nike

我有一个输入源如下。我想要做的是将每个 Layer 行上的数值捕获到一个数组中,然后打印出最大值。

输入

MACRO cell_1
size 0.1 by 0.1 ;

pin a
(....same topology as pin vcc)
END a

pin b
(.....same topology as pin vcc)
END b

Pin vcc
aaaa
bbbb
Port
Layer m2 ;
END
CCC
DDD
Port
Layer m1 ;
END
EEE
FFF
Port
Layer m0 ;
END
END vcc

pin d
(....same topology as pin vcc)
END d
END cell_1

MACRO cell_2
(repeated)
END cell_2

我的代码:

foreach my $file ( @files ) {   # @files = multiple path  of abc/def/fgh/cell_lef

open( INFILE, "<$file" ) || die "Can not open stdcell_file\n";
my @lines = <INFILE>;
close INFILE;

$init = 1;
$delimiter =~ /^$/; # between each MACRO. haven't utilize this yet

foreach (@lines) {

if ( $init ) {
$path = 1;
$init = 0;
@num = ();
}

if ( $path ) {

if ( /MACRO\s+(\S+) /) {
$cellname = $1; print "$cellname\n";
}

if ( /SIZE\s+(\S+)\s+(\S+)\s+(\S+)/ ) {
$footprint_x = $1;
$footprint_y = $3;
print "$footprint_x $footprint_y\n";
}

if ( /PIN vcc/ .. /END vcc/ ) {

#grab the highest value from layer (m*)
#print "max layer = m*"
}

$init = 1;
}
}
}

预期输出

cell_1
0.1 0.1
m2

cell_2
0.2 0.2
m3

我尝试使用的代码:

if ( /PIN vcc/../END vcc/ ) {
if ( /LAYER\s+m(\S+) / ) {
push(@num, $1);
print "@num";
}
}

到目前为止,我的代码存在的问题是,当我打印 @num 的值时,所有值都作为一个字符串 (210) 连接在一起,而不是单独的elements: 2 1 0 - 所以我无法进行排序以获得最大值。

更新:我不确定如何将 while 集成到我的代码中,因为我使用 foreach 作为我的主循环

最佳答案

您的代码可以正常捕获数字,只是您要打印整个数组。打印数组时 Perl 的默认数组元素分隔符是 ""即,什么都没有 - 所以,它看起来像一个字符串,但它是三个(或许多)元素,彼此相邻打印,没有分隔符。

您可以使用 while (<>) { 以 Unix 过滤器样式逐行迭代输入.您可以在找到“PIN vcc”时打开“扫描模式”标志,并在找到“END vcc”时将其关闭。之后,使用正则表达式搜索图层行,但始终使用“扩展模式”/x因此您可以在正则表达式中使用空格。

由于用于切换模式和捕获层数的正则表达式是互斥的,您可以让其他检查在检查成功后进行 - 请注意,如果 future 的更改导致重叠情况,您需要执行 next当其中一个正则表达式成功时。

最后,List::Util是一个核心模块,所以,你不妨捕获 max function从中;

use v5.12;
use warnings;
use List::Util qw( max );

my @num ;
my $scanning = 0;
while (<>) {
$scanning = 1 if /PIN vcc/ ;
$scanning = 0 if /END vcc/ ;
next unless $scanning ;
push @num, $1 if /Layer \s+ m (\d+) /x ;
}
say "Max layer number found: ", max(@num) ;

关于perl - 如何从 Perl 中的数组中获取最大值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37337096/

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