Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: perl: зависает выполнение pl-скрипта  (Прочитано 1294 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Dinamik

  • Автор темы
  • Новичок
  • *
  • Сообщений: 2
    • Просмотр профиля
Здравствуйте!
  Прошу простить, если вопрос глуп/странен и/или задан не в той ветке.
  Ubuntu 10.10 (из-за проблем с графикой в новых версиях использую старую 10.10)
  Есть файл DE-HB-poly.osm: <?xml version='1.0' encoding='UTF-8'?>
<osm version='0.5' upload='true' generator='JOSM'>
  <node id='-9784' action='modify' visible='true' lat='53.140082629458526' lon='9.018268575809449' />
  <node id='-9756' action='modify' visible='true' lat='53.03261128764498' lon='8.994253114069481' />
  <node id='-9752' action='modify' visible='true' lat='53.100089028217134' lon='8.997726914794855' />
  <node id='-9712' action='modify' visible='true' lat='53.234711034646104' lon='8.519149228573733' />
  <node id='-9710' action='modify' visible='true' lat='53.19980925936167' lon='8.478721075236285' />
  <node id='-9700' action='modify' visible='true' lat='53.095270652224514' lon='8.651187309648364' />
  <node id='-9698' action='modify' visible='true' lat='53.03511953682501' lon='8.705255677372492' />
  <node id='-9690' action='modify' visible='true' lat='53.235792404573786' lon='8.469335618054522' />
  <node id='-9688' action='modify' visible='true' lat='53.19500602337247' lon='8.727322928900481' />
  <node id='-9656' action='modify' visible='true' lat='53.220540523994444' lon='8.584147478912005' />
  <node id='-9634' action='modify' visible='true' lat='53.0023273812199' lon='8.92082849997294' />
  <way id='-9794' action='modify' visible='true'>
    <nd ref='-9634' />
    <nd ref='-9698' />
    <nd ref='-9700' />
    <nd ref='-9710' />
    <nd ref='-9690' />
    <nd ref='-9712' />
    <nd ref='-9656' />
    <nd ref='-9688' />
    <nd ref='-9784' />
    <nd ref='-9752' />
    <nd ref='-9756' />
    <nd ref='-9634' />
    <tag k='note' v='created by poly2osm.pl from a polygon file. not for uploading!' />
    <tag k='polygon_file' v='bremen' />
    <tag k='polygon_id' v='1' />
  </way>
</osm>

Есть скрипт osm2poly.pl: #!/usr/bin/perl

# script to convert an OSM file to a polygon file.
# the OSM file must follow certain conventions, namely
# each way must have a polygon_file and polygon_id tag,
# may have a note tag and must not have others.
#
# written by Frederik Ramm <frederik@remote.org>, public domain.

use strict;

my $poly_id;
my $poly_file;
my $polybuf;
my $outbuf;
my $nodes;
my $id=0;

while(<>)
{
    if (/^\s*<node.*\sid=["']([0-9-]+)['"].*lat=["']([0-9.eE-]+)["'] lon=["']([0-9.eE-]+)["']/)
    {
        $nodes->{$1}=[$2,$3];
    }
    elsif (/^\s*<way /)
    {
        undef $poly_id;
        undef $poly_file;
        $polybuf = "";
    }
    elsif (defined($polybuf) && /k=["'](.*)["']\s*v=["'](.*?)["']/)
    {
        if ($1 eq "polygon_file")
        {
            $poly_file=$2;
        }
        elsif ($1 eq "polygon_id")
        {
            $poly_id=$2;
        }
        elsif ($1 ne "note")
        {
            die("cannot process tag '$1'");
        }
    }
    elsif (/^\s*<nd ref=['"]([0-9-]+)["']/)
    {
        my $id=$1;
        die("dangling reference to node $id") unless defined($nodes->{$id});
        $polybuf .= sprintf("   %E   %E\n", $nodes->{$id}->[1], $nodes->{$id}->[0]);
    }
    elsif (/^\s*<\/way/)
    {
        if (!defined($polybuf))
        {
            die("incomplete way definition");
        }
        $poly_id = ++$id unless defined($poly_id);
        $outbuf .= "$poly_id\n$polybuf"."END\n";
        undef $polybuf;
    }
}
$poly_file = "polygon" unless defined($poly_file);
print "$poly_file\n$outbuf"."END\n";

Набираю в папке, в которой находятся оба файла: perl osm2poly.pl DE-HB-poly.osm -> DE-HB-poly.polyСкрипт запускается, создаётся пустой файл DE-HB-poly.poly и... больше ничего не происходит. Выполнение продолжается и не завершается.

Помнится, когда я только поставил Ubuntu, я пробовал запускать этот скрипт, он не заработал. С perl-ом (по крайней мере - умышленно) я ничего не делал (не настраивал, не обновлял), но потом скрипт заработал. Сейчас я поставил 10.10 с нуля (пришлось переставить) - скрипт опять не работает.

Что может означать невыполнение/незавершение работы скрипта? Скрипт работал - факт. Может быть, в прошлый раз я как-то непредумышленно обновил perl и потому скрипт заработал? Можно ли как-нибудь заставить perl "объяснить", в чём затык? Файлы такого размера этим скриптом должны обрабатывать мгновенно.

Пробовал запускать c sudo - ничего не поменялось.

Оффлайн MEXAHOTABOP

  • Активист
  • *
  • Сообщений: 902
    • Просмотр профиля
Re: perl: зависает выполнение pl-скрипта
« Ответ #1 : 02 Июня 2012, 14:51:56 »
я почти не знаю перл но могу предположить что там вместо -> нужно >
http://fonline.ru/ заходите

Оффлайн Dinamik

  • Автор темы
  • Новичок
  • *
  • Сообщений: 2
    • Просмотр профиля
Спасибо! Проблема была именно в ->
« Ответ #2 : 02 Июня 2012, 14:58:57 »
Спасибо! Я сам себе злобный Буратино :idiot2:. Чтобы не забыть команды, я написал инструкцию и почему-то в ней написал -> вместо > . Наверное, когда забыл, что написано в инструкции, как-то поставил > и скрипт заработал. Сейчас опять посмотрел инструкцию и стал вводить неправильную команду :D

Оффлайн MEXAHOTABOP

  • Активист
  • *
  • Сообщений: 902
    • Просмотр профиля
Re: perl: зависает выполнение pl-скрипта
« Ответ #3 : 02 Июня 2012, 15:01:33 »
бывает
http://fonline.ru/ заходите

 

Страница сгенерирована за 0.052 секунд. Запросов: 25.