データを読み取りたいファイルがあります。これはデータのサンプルです:
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];
ただし、ファイルには 2 行で定義され、3 ではなく 6 つの負荷値を持つ "NODELOAD" 定義がいくつかあります (各行の最初の 2 つの数字は識別子で、次の 3/6 はデータです)。
if
次の行が「NODELOAD」で始まらず、数字が含まれている場合、データを保存するステートメントを作成するのが最も簡単ですか? テキスト ファイルのこの部分の後の最後の行には数字が含まれませんが、空白またはテキストが含まれる場合があります。