我有data.txt與數據如下所示。我有大約100個名字,3個常量ID爲100,200,300,每個名稱都有32個數據值。防止重寫數據散列
NAME: xyz
ID: 100
DATA: 10 15 99 13 ...
ID: 200
DATA: 23 45 78 90..
ID: 300
DATA: 45 67 89 56
NAME: abc
ID: 100
DATA: 2 4 787 8..
ID: 200
DATA: 12 14 17..
ID: 300
DATA: 45 34 22..
我需要把這些數據寫入到另一個文件,它看起來像
xyz_100, xyz_200,xyz_300,abc_100,...
10 , 23 , 45 ,2
15 , 45 ,67 ,4
我建立一個哈希存儲的值,但現在我的代碼覆蓋前兩個條目,並存儲在最後一項。我怎樣才能保存前兩個條目,請讓我知道我是否可以簡化代碼。
#!/usr/local/bin/perl
use diagnostics;
use strict;
use warnings;
my @avar_names;
my %record;
local $/ = '';
open my $fh, '<', 'datalog.dat' or die "failed: $!";
while (<$fh>) {
chomp;
my %avar;
while (/^([A-Z:]+):\s*(.*)/mg) {
$avar{$1} = $2;
}
my $avar_name = "$avar{NAME}_$avar{ID}";
push @avar_names, $avar_name;
$record{$avar_name} = $avar{DATA};
use Data::Dumper;
print Dumper \%record;
}
感謝您的回覆。轉儲不打印任何東西。是範圍外的%記錄的值?如果我更改爲打印\%阿瓦爾而不是\%記錄其打印最後一個值abc_300。 – user1336997
糟糕。它實際上是'$ 1',而不是'if(exist ...)'行中的$ 2' ...應該始終相信複製粘貼與手動更改;-) –
perfecto !!萬分感謝! – user1336997