Perl,次要修改 - 数据9999.9更改为999-999,现在丢弃零值元素

时间:2014-06-19 19:53:56

标签: perl hash

我是这个网站的新手,所以希望明白我的问题!我继承了过去几年我不得不修改的一些Perl程序 - 我已经取得了很大的成功......直到现在。

有问题的程序从.ini文件读取GL代码,然后读取数据库表以提取与前一天的那些GL代码相关联的值,将结果放入哈希,最终创建要导入到另一个的文件系统。 GL代码的格式为9999.9,但现在格式为999-999。这导致GL代码不被识别为数字。我做了一些小改动以适应这个:

更改了IF声明
foreach my $num ( @glnums )
{
    if ( $num == $amt[4] )
}

foreach my $num ( @glnums )
{
   if ( $num = $amt[4] )
}

纠正了我的第一个错误。我也改变了:

 my @srtkeys = sort keys %ccsales;

 my @srtkeys = sort { $a cmp $b } keys %ccsales;

确实导致GL代码的顺序正确。

该程序已编译并正在提取正确的结果,并按正确的顺序排列 - 很高兴。

突然没做的是为任何没有价值的GL代码设置0。我需要每个GL代码的列输出,因此记录布局保持一致。我确实看到一个用零初始化哈希值的语句,我没有修改过:

foreach ( @glnums ) # my GL codes array
{
    $ccsales{ $_} = 0.00;
}

我用几种不同的方式搜索了我的问题,并一直在搜索本网站上的先前问题,希望找到一些可以指向正确方向的东西,但却找不到任何东西。请帮忙?我希望我已经给了你足够的信息,但如果我没有,请告诉我。先感谢您!

1 个答案:

答案 0 :(得分:0)

您的问题没有给出您显示的代码片段的任何上下文,我只能看到

if ( $num = $amt[4] )

可能是错误的,因为它是一项任务,而非比较。这也可能是您丢失零的原因,因为undef中的值为""或空字符串$amt[4]的值为 false ,并且不会执行该块。你可能需要一个字符串比较,比如这个

if ( $num eq $amt[4] )

此外,您对排序的更改

my @srtkeys = sort { $a cmp $b } keys %ccsales

没有任何区别,因为它与像这样的<{1}}一样

sort

除此之外我无法帮助。如果您需要其他帮助,您应该展示更多代码