我正在尝试制作一些PERL脚本(我是初学者!)
我拿了一个示例代码并根据我的需要编辑它。
因此,任务是从csv文件中读取数据,将它们放入html表中,并以饼图形式显示图表。
该表已经有效,只有饼图是我的问题。我已经查看并尝试了代码中图表部分的许多更改,但没有赢得带来。
这是我的代码:
URL
如果有人能给我最后需要的提示,那会很棒。 问候
答案 0 :(得分:1)
调试时,请始终确认您的数据和脚本流程,不要假设任何正确的内容。
尝试
use Data::Dumper; # at the top of your script
[...]
print Dumper(\@diagarray); # just before your $graph->plot call
您可能会注意到您的数据格式与http://search.cpan.org/~ruz/GDGraph-1.52/Graph.pm#USAGE
上显示的格式不同当示例显示ArrayRef的ArrayRef时,您将ArrayRef传递给 - >图:
[
['Desc1','Desc2'],
[250000, 350000],
]
我建议提取绘图部分并使用静态数据进行尝试,直到获得工作结果。然后将其复制回您的脚本并将静态数据替换为您的数据,例如:
#!/usr/bin/perl
use GD::Graph::pie;
my $graph = GD::Graph::pie->new(300, 300);
$graph->set(
title => 'Umsatzverteilung Filialen',
) or die $graph->error;
my @diagarray = (
['Title1', 'Title2', ],
[ 100, 200 ],
);
my $gd = $graph->plot(\@diagarray) or die $graph->error;
my $format = $graph->export_format;
print header("image/$format");
binmode STDOUT;
print $graph->plot(\@diagarray)->$format();
同时检查错误消息中报告的行。你的每一个 - >情节调用可能都是原因。
另外两条评论:
答案 1 :(得分:0)
将两个数组引用放入@diagarray与你如何推动标量输入没有任何不同。
push(@diagarray,\@labels);
push(@diagarray,\@values);
但是你希望这发生在while循环之外。在while循环中你可以填充@labels和@values。两个阵列的大小必须相同。
此外,您的脚本正在尝试一次性输出HTML和饼图,这将无法正常工作,因为您的浏览器只会将其视为一块HTML。您的HTML需要在其中包含指向其他网址的“img”标记。该URL可以是相同的脚本,但具有不同的查询字符串。例如
use CGI
my $query=new CGI;
if($query->param("piechart")) {
# print out the graph
} else {
print "<img src=\"",$ENV{"SCRIPT_NAME"},"?piechart=1\"/>";
}
或者您可以将饼图代码拆分为完全独立的脚本,但这使得维护起来不那么容易,因为如果数据中的读取代码发生了变化,您必须更新两个脚本。