【发布时间】:2019-01-15 09:19:14
【问题描述】:
我是 Perl 新手,正在尝试从文件中提取特定数据,如下所示:
Print of 9 heaviest strained elements:
Element no Max strain
20004 9.6 %
20013 0.5 %
11189 0.1 %
20207 0.1 %
11157 0.1 %
11183 0.0 %
10665 0.0 %
20182 0.0 %
11160 0.0 %
==================================================
我只想提取元素编号(20004、20013 等)并将它们写入新文件。文件的读取应在到达 (=========) 行后立即结束,因为稍后在文件中会有更多具有相同标题的元素编号。 希望这是有道理的。 非常感谢任何建议!
我现在有这个代码,它给了我一个数字列表,最多连续 10 个:
my $StrainOut = "PFP_elem"."_$loadComb"."_"."$i";
open DATAOUT, ">$StrainOut" or die "can't open $StrainOut"; # Open the file for writing.
open my $in, '<', "$POSTout" or die "Unable to open file: $!\n";
my $count = 0;
while(my $line = <$in>) {
last if $line =~ / ={10}\s*/;
if ($line =~ /% *$/) {
my @columns = split " ", $line;
$count++;
if($count % 10 == 0) {
print DATAOUT "$columns[1]\n";
}
else {
print DATAOUT "$columns[1] ";
}
}
}
close (DATAOUT);
close $in;
需要改变的是“my @columns = split...”这一行。目前,只要它有“9 个空格”,它就会拆分 $line 标量。由于元素编号的位数可能会有所不同,因此这是提取数据的一种不好的方法。是否可以只从左到右读取,省略所有空格并记录数字,直到数字后面跟着更多空格(这样百分比值被忽略)?
【问题讨论】:
-
这似乎有效:我的@columns = split(/\s+/,$line);