Вывод цикла Perl в электронную таблицу Excel - PullRequest
0 голосов
/ 01 августа 2011

У меня есть 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

секция кода делает. Он вызывает модуль perl под названием WordNet :: Similarity, который вычисляет меру родства между словами).

Все это прекрасно работает. Проблема в том, что я пытаюсь записать вывод (мера сходства или значение $ в этом сценарии) в новый файл Excel. Независимо от того, что я делаю с кодом, единственный вывод, который он мне даст, - это связь между LAST target и ответными словами. Он игнорирует все остальное.

Однако это происходит только тогда, когда я пытаюсь записать в файл Excel. Если вместо этого я использую функцию «печать», я могу увидеть все выходные данные в командном окне. Я всегда могу просто скопировать и вставить это в Excel, но было бы намного проще, если бы я мог автоматизировать это. Есть идеи, в чем проблема?

Ответы [ 2 ]

2 голосов
/ 03 августа 2011

Проблема решена.Мне просто нужно было переместить строки

my $workbook1 = Spreadsheet::WriteExcel->new('data.xls'); 
my $worksheet1 = $workbook1->add_worksheet();

в другую часть скрипта.Поскольку они были в операторе «for», программа продолжала перезаписывать файл «data.xls» при каждом запуске цикла.

2 голосов
/ 01 августа 2011

Вы каждый раз сбрасываете значение $ row на 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...