data.txt中改變從字符串的哈希值,以陣列
Name:xyz
ID:1
Value: 1 2 3 4 5 6 7 8 9 ...
ID:2
Value: 9 8 7 6 5 4 3 2 1..
ID:3
Value: 90 89 88....
Name:abc
ID:11
value:...
INTIAL FILE.TXT
## Header
..
data
data
data
..
最終預期file.txt的
## Header xyz_1,xyz_2,xyz_3,abc_11,...
..
data 1 9 90
data 2 8 89
data 3 7 88
data 4 6
..
電流輸出file.txt的
## Header xyz_1,xyz_2,xyz_3,abc_11,...
...
data, 1 2 3 4 5 6 7 8 9 ..,9 8 7 6 5 4 3 2 1 ..,90 89 88
data
data
...
代碼
#!/usr/local/bin/perl
use diagnostics;
use strict;
use warnings;
use Tie::File;
my @name_id;
my %test;
#local $/ = '';
open my $fh, '<', 'data.txt' or die "failed: $!";
my %var;
while (<$fh>) {
chomp;
if (m/^([A-Z:]+):\s*(.*)/) {
$var{$1} = $2;
if (exists($var{Name}) && exists($var{ID}) && exists($var{value}) && $1 eq 'value') {
my $var_name = "$var{Name}_$var{ID}";
push @name_id, $var_name;
$test{$var_name} = $var{value};
}
}
}
# print join "\n\t", @test{@name_id};
my $match = "## Header";
tie my @lines, 'Tie::File', 'file.txt' or die "failed : $!";
for my $line (@lines) {
if ($line =~ /^($match.*)/) {
$line = $1 . "," . join ',', @name_id;
}
}
untie @lines;
my $match = "data";
tie my @lines, 'Tie::File', 'file.txt' or die "failed : $!";
my $i = 0;
for my $line (@lines) {
if ($line =~ /^($match.*)/) {
$line = $1 . "," . join(',', map { $test{$_}->[$i] } @name_id);
$i++;
}
}
untie @lines;
有一個問題,這條線$line = $1 . "," . join (',', map { $test{$_}->[$i]} @name_id);
它拋出
不能使用串的誤差( 「1 2 3 4 5 6 7 8 9 ..」 ... )作爲數組引用而「嚴格參」在使用中test.pl線46,線80在test.pl線46
我認爲散列(%test
)值我是一個字符串,我可以將它分解爲一個數組。請讓我知道如何將其轉換爲數組。我試圖做$test{$var_name} = [qw($var{value})];
它沒有工作。
爲什麼你會混'$ i'和'在同一代碼共同$ 1'?爲什麼:(。請改名爲 – BLaZuRE