我是这个网站的新手,所以希望明白我的问题!我继承了过去几年我不得不修改的一些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;
}
我用几种不同的方式搜索了我的问题,并一直在搜索本网站上的先前问题,希望找到一些可以指向正确方向的东西,但却找不到任何东西。请帮忙?我希望我已经给了你足够的信息,但如果我没有,请告诉我。先感谢您!
答案 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
除此之外我无法帮助。如果您需要其他帮助,您应该展示更多代码