还是除数为0的问题各位老师请进
lanruosi
|
1#
lanruosi 发表于 2008-03-19 09:45
还是除数为0的问题各位老师请进
改写后的代码和文本:
#!/usr/bin/perl -w use strict; use warnings; my $localdir="D:\\tempf10"; #!!!设定F10所在目录 opendir DH,$localdir or die "XX OO$!";#打开文件句柄 foreach (readdir DH) { next if $_ eq "." or $_ eq "..";#不要2个.文件 $_="$localdir\\$_"; #文件名前加全路径 open INTXT,"< $_" or die"Can't open file $_: $!\n"; my %mark=('上海A股'=>'SH','深圳A股'=>'SZ','中小企业板'=>'SZ'); my ($code,$m)=(); my $bf_mark="证券类别"; #!!!取证券类别和代码需要的3个变量,不同的F10需要修改 my $bf_code="证券代码"; my $cn="[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]"; my @block; while (<INTXT>) { chomp; #print "$_\n"; # 测试文件读取打开 #===========================以下是取市场和代码===================================== #龙讯版-提取市场和代码需用的关键字保存在$bf_mark,$bf_code if (/│$bf_mark │($cn+)\s+/x) { $m=$1; #print "$mark{$m}\n"; next;#取得市场类别 } if (/│$bf_code │ (\d{6})/x) { $code=$1; #print "$code\n"; #取得证券代码 } my $star="【历年简要财务指标】"; #!!!设定处理块的开头 my $end ="【资产负债简表】"; #!!!设定处理块的结尾 if (/$star/../$end/) { push @block,$_; } } #==============以上是取市场和代码以及把处理块保存在@block========== my @data; my @date; foreach (@block) { my ($target,$target_1)=qw (净利润.万. 指标.报告期);#!!!设定提取项 if (/.*$target_1.*/) { m/(\d+-\d+-\d+)\D*(\d+-\d+-\d+)\D*(\d+-\d+-\d+)\D*(\d+-\d+-\d+)/; my @record = ($1, $2, $3, $4); @date = (@date, @record) } if (/.*$target.*/) { m/(\d+\.\d+)\D*(\d+\.\d+)\D*(\d+\.\d+)\D*(\d+\.\d+)/; my @record = ($1, $2, $3, $4); @data = (@data, @record) } } my %date_data; $date_data{$date[$_]} = $data[$_] for (0..$#date); my $tbzz= eval ((($date_data{"2007-09-30"} - $date_data{"2007-06-30"}) - ($date_data{"2006-09-30"} - $date_data{"2006-06-30"})) / ($date_data{"2006-09-30"} - $date_data{"2006-06-30"})); if ($@) { warn "Something error: $@\n" } else { print "tbzz is $tbzz\n"; } } 文本范例如下: 【历年简要财务指标】 单位(元) ━━━━━━━━━━┯━━━━━┯━━━━━┯━━━━━┯━━━━━━ 指标\报告期 │2007-09-30│2007-06-30│2007-03-31│2006-12-31 ──────────┼─────┼─────┼─────┼────── 每股收益 │ 0.0925│ 0.0706│ 0.0436│ 0.1700 每股收益扣除 │ 0.0910│ 0.0677│ 0.0436│ 0.1700 每股净资产 │ 5.5830│ 5.5600│ 5.6400│ 5.4850 调整后每股净资产 │ -│ -│ -│ 5.2900 净资产收益率(%) │ 1.6600│ 1.2690│ 0.7734│ 3.1100 每股资本公积金 │ 3.0887│ 3.0887│ 3.0887│ 3.0887 每股未分配利润 │ 0.2016│ 0.1797│ 0.2527│ 0.2262 营业收入(万) │ 849237.1│ 561410.6│ 336650.4│ - 主营业务收入(万) │ -│ -│ -│ 1265615.1 净利润(万) │ 5567.0│ 4247.4│ 2625.9│ 10263.8 营业利润(万) │ 6168.8│ 4548.0│ 2858.4│ 11791.0 主营业务利润(万) │ -│ -│ -│ 213144.8 投资收益(万) │ 365.1│ 2.4│ -│ 133.8 审计意见 │ -│ -│ -│无保留意见 ━━━━━━━━━━┷━━━━━┷━━━━━┷━━━━━┷━━━━━━ ━━━━━━━━━━┯━━━━━┯━━━━━┯━━━━━┯━━━━━━ 指标\报告期 │2006-09-30│2006-06-30│2005-12-31│2004-12-31 ──────────┼─────┼─────┼─────┼────── 每股收益 │ 0.0804│ 0.0554│ 0.1190│ 0.2340 每股收益扣除 │ -│ 0.0600│ 0.1070│ 0.1700 每股净资产 │ 5.4000│ 5.3900│ 5.3340│ 5.3060 调整后每股净资产 │ 5.2340│ 5.1500│ 5.0850│ 5.1080 净资产收益率(%) │ 1.4900│ 1.0300│ 2.2390│ 4.4100 每股资本公积金 │ 3.0878│ 3.0878│ 3.0878│ 3.0858 每股未分配利润 │ 0.1835│ 0.1585│ 0.1031│ -0.6242 营业收入(万) │ -│ -│ -│ - 主营业务收入(万) │ 855993.4│ 553812.6│ 1145589.2│ 1336252.2 净利润(万) │ 4837.2│ 3336.8│ 7189.9│ 14072.7 营业利润(万) │ 6066.2│ 4208.5│ 3264.9│ 13362.7 主营业务利润(万) │ 147884.3│ 97354.4│ 188346.6│ 196940.2 投资收益(万) │ -75.9│ -75.9│ 723.7│ 3668.9 审计意见 │ -│ -│无保留意见│无保留意见 ━━━━━━━━━━┷━━━━━┷━━━━━┷━━━━━┷━━━━━━ 深康佳A最新净利润为5415.01万元,同比增加11.94%,每股收益为0.0925元,同比增加15.05%。 【资产负债简表】 然后提示还是除数为0,打印%date_data的内容和cobrawgl老师写的测试代码中的%date_data内容完全相同啊,但是老师的代码没错,我的就是提示除数为0,为什么呢? 附cobrawgl老师代码: 我用你给的文本文件写了个测试程序 #!/usr/bin/perl use strict; use warnings; my @date; my @data; my $count = 0; while (<DATA>) { chomp; $count = 0 if $count == 18; $count += 1; if ($count == 2) { m/(\d+-\d+-\d+)\D*(\d+-\d+-\d+)\D*(\d+-\d+-\d+)\D*(\d+-\d+-\d+)/; my @record = ($1, $2, $3, $4); @date = (@date, @record) } if ($count == 13) { m/(\d+\.\d+)\D*(\d+\.\d+)\D*(\d+\.\d+)\D*(\d+\.\d+)/; my @record = ($1, $2, $3, $4); @data = (@data, @record) } } my %date_data; $date_data{$date[$_]} = $data[$_] for (0..$#date); my $tbzz= eval ((($date_data{"2007-09-30"} - $date_data{"2007-06-30"}) - ($date_data{"2006-09-30"} - $date_data{"2006-06-30"})) / ($date_data{"2006-09-30"} - $date_data{"2006-06-30"})); if ($@) { warn "Something error: $@\n" } else { print "tbzz is $tbzz\n"; } __DATA__ ━━━━━━━━━━┯━━━━━┯━━━━━┯━━━━━┯━━━━━━ 指标\报告期 │2007-09-30│2007-06-30│2007-03-31│2006-12-31 ──────────┼─────┼─────┼─────┼────── 每股收益 │ 0.0925│ 0.0706│ 0.0436│ 0.1700 每股收益扣除 │ 0.0910│ 0.0677│ 0.0436│ 0.1700 每股净资产 │ 5.5830│ 5.5600│ 5.6400│ 5.4850 调整后每股净资产 │ -│ -│ -│ 5.2900 净资产收益率(%) │ 1.6600│ 1.2690│ 0.7734│ 3.1100 每股资本公积金 │ 3.0887│ 3.0887│ 3.0887│ 3.0887 每股未分配利润 │ 0.2016│ 0.1797│ 0.2527│ 0.2262 营业收入(万) │ 849237.1│ 561410.6│ 336650.4│ - 主营业务收入(万) │ -│ -│ -│ 1265615.1 净利润(万) │ 5567.0│ 4247.4│ 2625.9│ 10263.8 营业利润(万) │ 6168.8│ 4548.0│ 2858.4│ 11791.0 主营业务利润(万) │ -│ -│ -│ 213144.8 投资收益(万) │ 365.1│ 2.4│ -│ 133.8 审计意见 │ -│ -│ -│无保留意见 ━━━━━━━━━━┷━━━━━┷━━━━━┷━━━━━┷━━━━━━ ━━━━━━━━━━┯━━━━━┯━━━━━┯━━━━━┯━━━━━━ 指标\报告期 │2006-09-30│2006-06-30│2005-12-31│2004-12-31 ──────────┼─────┼─────┼─────┼────── 每股收益 │ 0.0804│ 0.0554│ 0.1190│ 0.2340 每股收益扣除 │ -│ 0.0600│ 0.1070│ 0.1700 每股净资产 │ 5.4000│ 5.3900│ 5.3340│ 5.3060 调整后每股净资产 │ 5.2340│ 5.1500│ 5.0850│ 5.1080 净资产收益率(%) │ 1.4900│ 1.0300│ 2.2390│ 4.4100 每股资本公积金 │ 3.0878│ 3.0878│ 3.0878│ 3.0858 每股未分配利润 │ 0.1835│ 0.1585│ 0.1031│ -0.6242 营业收入(万) │ -│ -│ -│ - 主营业务收入(万) │ 855993.4│ 553812.6│ 1145589.2│ 1336252.2 净利润(万) │ 4837.2│ 3336.8│ 7189.9│ 14072.7 营业利润(万) │ 6066.2│ 4208.5│ 3264.9│ 13362.7 主营业务利润(万) │ 147884.3│ 97354.4│ 188346.6│ 196940.2 投资收益(万) │ -75.9│ -75.9│ 723.7│ 3668.9 审计意见 │ -│ -│无保留意见│无保留意见 ━━━━━━━━━━┷━━━━━┷━━━━━┷━━━━━┷━━━━━━ >perl -w test.pl tbzz is -0.120501199680085 自己能力有限,研究了几日还是不能解决,请老师帮忙,谢谢。 还有我想让@data里也能匹配到净利润为负数的情况,正则怎么改写好? |