Я новичок в 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 пробелов». Поскольку количество цифр номеров элементов может варьироваться, это плохой способ извлечения данных. Можно ли просто читать слева направо, пропуская все пробелы и записывая числа только до тех пор, пока за числами не последует больше пробелов (таким образом, процентное значение игнорируется)?