1
我有一个文件,我想从中读取数据。这是数据的一个样本:从文件中读取两行数据
NODELOAD 28 27132 3.29108E+04 7.94536E+04 0.00000E+00
NODELOAD 29 27083 9.89950E+04 9.89950E+04 0.00000E+00
NODELOAD 29 27132 6.08112E+04 6.08112E+04 0.00000E+00
NODELOAD 30 27083 1.29343E+05 5.35757E+04 0.00000E+00
NODELOAD 30 27132 7.94536E+04 3.29108E+04 0.00000E+00
NODELOAD 31 68 4.80185E+04 -5.47647E+04 -1.17033E+04
-1.27646E+03 1.18350E+04 -2.03885E+03
NODELOAD 31 1114 1.20706E+05 -3.31323E+04 -7.17280E+04
2.28198E+03 2.75582E+04 5.74460E+02
我有这样的代码和我能够读取单个行的所有值,并将它们保存到一个数组:
foreach my $line (@input) {
if($line =~ /^\s*NODELOAD\s+/i) {
$line =~ s/^\s*//;
@a = split(/\s+/,$line);
$modelData{"NODELOAD"}->{$a[1]}->{$a[2]}->{"Fx"} = $a[3];
$modelData{"NODELOAD"}->{$a[1]}->{$a[2]}->{"Fy"} = $a[4];
$modelData{"NODELOAD"}->{$a[1]}->{$a[2]}->{"Fz"} = $a[5];
不过,也有一些“ NODELOAD“定义在文件中定义在两行上,并且具有6个加载值而不是3(每行上的前两个数字是标识符,以下3/6是数据)。
是否最简单的写一个if
语句,如果下面一行不是以“NODELOAD”开头并包含数字,它将保存数据?文本文件中此部分之后的最后一行不会包含任何数字,但可能是空白或包含文本。
这看起来不错,但是我应该指出的是,我从阅读文件包含很多其他的数据,以及,所以我仍然需要初始的'if($ line =〜/^\ s * NODELOAD \ s +/i){'代码,否则它会拿起其他的数据 –
我用你的方法解决了它。谢谢! –