我有一个Perl脚本,其相关位在下面发布。
# Pull values from cells
ROW:
for my $row ( $row_min + 1 .. $row_max ) {
my $target_cell = $worksheet->get_cell( $row, $target_col);
my $response_cell = $worksheet->get_cell( $row, $response_col);
if ( defined $target_cell && defined $response_cell ) {
my $target = $target_cell->value();
my $response = $response_cell->value();
# Determine relatedness
my $value = $lesk->getRelatedness($target, $response);
# Copy output to new Excel spreadhseet, 'data.xls'
my $workbook1 = Spreadsheet::WriteExcel->new('data.xls');
my $worksheet1 = $workbook1->add_worksheet();
$worksheet1->set_column(0, 3, 18);
my $row = 0;
foreach ($target) {
$row++;
$worksheet1->write( $row, 0, "Target = $target\n");
$worksheet1->write( $row, 1, "Response = $response\n");
$worksheet1->write( $row, 2, "Relatedness = $value\n");
}
}
}
此脚本使用Perl模块ParseExcel和WriteExcel。输入数据电子表格是两列下的单词列表,一列标记为“目标”,另一列标记为“响应”。该脚本获取每个目标词和每个响应词,并计算它们之间的相关性值(这就是
$lesk->getRelatedness
部分代码正在进行中。它调用一个名为WordNet :: Similarity的perl模块来计算单词之间相关性的度量。)
所有这一切都很好。问题是我试图将输出(相似度量或此脚本中的$值)写入新的Excel文件。无论我对代码做什么,它给我的唯一输出是LAST目标和响应字之间的相关性。它忽略了所有其余的。
但是,这只发生在我尝试写入Excel文件时。如果我使用'print'函数,我可以在命令窗口中看到所有输出。我总是可以将它复制并粘贴到Excel中,但如果我能自动化它会更容易。知道问题是什么吗?
答案 0 :(得分:2)
您每次都将$ row的值重置为0.
答案 1 :(得分:2)
问题解决了。我只需要移动
my $workbook1 = Spreadsheet::WriteExcel->new('data.xls');
my $worksheet1 = $workbook1->add_worksheet();
指向脚本的另一部分。由于它们处于'for'语句中,因此程序在每次循环时都会覆盖'data.xls'文件。