데이터를 읽으려는 파일이 있습니다. 나는이 코드를 가지고 있고, 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];
, 일부는 "이있다 파일에서 두 행에 정의되고 3 대신로드 값이 6 인 NODELOAD 정의가 있습니다 (각 행의 처음 두 숫자는 ID이고, 다음 3/6은 데이터입니다).
if
문을 쓰는 것이 가장 쉽습니다. 다음 문구가 "NODELOAD"로 시작하지 않고 숫자가 포함되어 있으면 데이터를 저장합니까? 텍스트 파일에서이 부분 다음의 마지막 줄에는 숫자가 포함되지 않지만 공백이거나 텍스트를 포함 할 수 있습니다.
그러나 내가에서 읽고 있어요 파일이 다른 데이터를 많이도 포함되어 있음을 지적해야 따라서 초기에'if ($ line = ~/^ \ * * NODELOAD \ s +/i) {'코드가 필요합니다. 그렇지 않으면 다른 데이터를 가져옵니다. –
당신의 방법을 사용하고 해결했습니다. 감사! –