【发布时间】:2017-04-19 21:10:10
【问题描述】:
问题是在每个新行读取一个具有值的文件。文件内容看起来像
3ssdwyeim3,3ssdwyeic9,2017-03-16,09:10:35.372,0.476,EndInbound
3ssdwyeim3,3ssdwyfyyn,2017-03-16,09:10:35.369,0.421,EndOutbound
3ssdwyfxc0,3ssdwyfxfi,2017-03-16,09:10:35.456,0.509,EndInbound
3ssdwyfxc0,3ssdwyhg0v,2017-03-16,09:10:35.453,0.436,EndOutbound
第一个逗号之前的字符串是键,最后一个和倒数第二个逗号之间的字符串是值
即第一行 3ssdwyeim3 成为键和 0.476 值。
现在,如果键存在,我们将遍历每一行,我们必须连接用逗号分隔的值。
因此对于下一个新行,因为键已经存在,键仍然是3ssdwyeim3,但值更新为0.476,0.421.
最后我们必须在文件中打印键和值。
我已经写了一个代码来实现相同的,如下。
sub findbreakdown {
my ( $out ) = @_;
my %timeLogger;
open READ, "out.txt" or die "Cannot open out.txt for read :$!";
open OUTBD, ">$out\_breakdown.csv" or die "Cannot open $out\_breakdown.csv for write :$!";
while ( <READ> ) {
if ( /(.*),.*,.*,.*,(.*),.*/ ) {
$btxnId = $1;
$time = $2;
if ( !$timeLogger{$btxnId} ) {
$timeLogger{$btxnId} = $time;
}
else {
$previousValue = $timeLogger{$btxnId};
$newValue = join ",", $previousValue, $time;
$timeLogger{$btxnId} = $newValue;
}
}
foreach ( sort keys %timeLogger ) {
print OUTBD "$_ ,$timeLogger{$_}\n";
}
}
close OUTBD;
close READ;
}
但是出了点问题,它的打印是这样的
3ssdwyeim3,0.476
3ssdwyeim3,0.476,0.421
3ssdwyeim3,0.476,0.421
3ssdwyfxc0,0.509
3ssdwyeim3,0.476,0.421
3ssdwyfxc0,0.509,0.436
3ssdwyeim3,0.476,0.421
3ssdwyfxc0,0.509,0.436
而预期是:
3ssdwyeim3,0.476,0.421
3ssdwyfxc0,0.509,0.436
【问题讨论】: