Perl 满足你的新要求。它与您提供的数据的唯一区别是ID 35;和相应的数据被排序到第一列。它应该能在你的真实文件中正常工作。谢谢你的帮助。在您的输入和一些时间测试之间,我已经能够让它工作;非常感谢!目标是将脚本打包为一个独立的应用程序。我已经为我们使用的其他四个
Perl 满足你的新要求。它与您提供的数据的唯一区别是ID 35;和相应的数据被排序到第一列。它应该能在你的真实文件中正常工作。谢谢你的帮助。在您的输入和一些时间测试之间,我已经能够让它工作;非常感谢!目标是将脚本打包为一个独立的应用程序。我已经为我们使用的其他四个,perl,sorting,hash,Perl,Sorting,Hash,满足你的新要求。它与您提供的数据的唯一区别是ID 35;和相应的数据被排序到第一列。它应该能在你的真实文件中正常工作。谢谢你的帮助。在您的输入和一些时间测试之间,我已经能够让它工作;非常感谢!目标是将脚本打包为一个独立的应用程序。我已经为我们使用的其他四个数据收集系统做了这项工作。在数据库中设置它会阻止此.DB_文件包,提供“btree(File)as hash”是否可以接受?它将为您提供密钥排序哈希。 Start,Date,Time0 Subject,ID1,ID2,[...],ID# Da
满足你的新要求。它与您提供的数据的唯一区别是
ID 35;
和相应的数据被排序到第一列。它应该能在你的真实文件中正常工作。谢谢你的帮助。在您的输入和一些时间测试之间,我已经能够让它工作;非常感谢!目标是将脚本打包为一个独立的应用程序。我已经为我们使用的其他四个数据收集系统做了这项工作。在数据库中设置它会阻止此.DB_文件包,提供“btree(File)as hash”是否可以接受?它将为您提供密钥排序哈希。
Start,Date,Time0
Subject,ID1,ID2,[...],ID#
Date,Time1
Data1,aa1,aa2,[...],aa#
Data2,ba1,ba2,[...],ba#
Data3,ca1,ca2,[...],ca#
Data4,da1,da2,[...],da#
Date,Time2
Data1,ab1,ab2,[...],ab#
Data2,bb1,bb2,[...],bb#
Data3,cb1,cb2,[...],cb#
Data4,db1,db2,[...],db#
Data1,Subject,ID1,ID2,[...],ID#
Date,Time1,aa1,aa2,[...],aa#
Date,Time2,ab1,ab2,[...],ab#
...
Data2,Subject,ID1,ID2,[...],ID#
Date,Time1,ba1,ba2,[...],ba#
Date,Time2,bb1,bb2,[...],bb#
...
my ($datatype, @fields) = @line;
push @keys, $datatype unless exists $data{$datatype};
my $datetime = "$date\,$time";
push @timestamps, $datetime unless exists $data{$datetime};
for my $i ( 0 .. $#fields) {
push @{$data{$datetime}{$ids[$i]}}=>$fields[$i]
};
foreach my $date (keys %data) {
print OUT $date;
foreach my $id (@ids) {
foreach my $s (keys %{$data{$date}}) {
if ( exists($data{$date}{$id}) ) {
print OUT ",", $data{$date}{$id}
}
else {
print OUT ",";
}
}
}
print OUT "\n"; # close printing on a given date
}
$VAR1 = {
'date,time' => [
'ID1' => [
'0.00'
]
'ID2' => [
'0.12',
]
'ID3' => [
'0.17',
]
'ID4' => [
'0.22',
]
]
}
};
date,time,ARRAY(0x7f91c1030f60),ARRAY(0x7f91c1030f60),ARRAY(0x7f91c1030f60),ARRAY(0x7f91c1030f60)
use strict;
use warnings;
my ($subject, @ids);
my @sort_order;
my (%data, @keys);
my ($file) = @ARGV;
$file //= 'data.csv';
open my $fh, '<', $file or die qq{Unable to open file "$file" for reading: $!};
local $/ = '';
while (<$fh>) {
my @rows = split /\n/;
unless ($subject) {
($subject, @ids) = split /,/, $rows[1];
@sort_order = sort { $ids[$a] cmp $ids[$b] } 0 .. $#ids;
next;
}
my ($date, $time) = split /,/, shift @rows;
for (@rows) {
my ($id, @fields) = split /,/;
push @keys, $id unless exists $data{$id};
push @{ $data{$id} }, [$date, $time, @fields[@sort_order]];
}
}
for my $key (@keys) {
print join(',', $key, $subject, @ids[@sort_order]), "\n";
print join(',', @$_), "\n" for @{ $data{$key} };
print "\n";
}
Data1,Subject,ID#,ID1,ID2,[...]
Date,Time1,aa#,aa1,aa2,[...]
Date,Time2,ab#,ab1,ab2,[...]
Data2,Subject,ID#,ID1,ID2,[...]
Date,Time1,ba#,ba1,ba2,[...]
Date,Time2,bb#,bb1,bb2,[...]
Data3,Subject,ID#,ID1,ID2,[...]
Date,Time1,ca#,ca1,ca2,[...]
Date,Time2,cb#,cb1,cb2,[...]
Data4,Subject,ID#,ID1,ID2,[...]
Date,Time1,da#,da1,da2,[...]
Date,Time2,db#,db1,db2,[...]