Модераторы: korob2001, ginnie

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Показать разницу между 2 строками 
:(
    Опции темы
Suppir
Дата 22.4.2011, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 20.4.2009

Репутация: нет
Всего: нет



Есть две строки:

О тарифе на услуги по передаче электрической энергии по сетям ОАО "Лесопромышленная холдинговая компания "Коношалес"
О тарифе на услугу по передаче электрической энергии по сети ОАО "Лесопромышленная холдинговая компания "Коношалес"


Необходимо визуально показать разницу между двумя строками. Как-нибудь так:

О тарифе на услуги по передаче электрической энергии по сетям ОАО "Лесопромышленная холдинговая компания "Коношалес"
О тарифе на услуг<у> по передаче электрической энергии по сет<и> ОАО "Лесопромышленная холдинговая компания "Коношалес"


Уже голову сломал, не знаю как это сделать  smile 

Это сообщение отредактировал(а) Suppir - 22.4.2011, 17:46
PM MAIL   Вверх
alezzz
Дата 22.4.2011, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


сплю...
**


Профиль
Группа: Участник
Сообщений: 499
Регистрация: 17.8.2009

Репутация: 1
Всего: 14



Algorithm::Diff не подойдет?
PM MAIL   Вверх
KSURi
Дата 22.4.2011, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 887
Регистрация: 8.6.2006
Где: Russia

Репутация: 20
Всего: 27



diff работает построчно. Смотрите на программу wdiff и алгоритм, который в ней реализован.


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
arto
Дата 22.4.2011, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

Репутация: 38
Всего: 40



split "\\s+"
или
split ""
PM MAIL ICQ   Вверх
DurRandir
Дата 22.4.2011, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 335
Регистрация: 27.9.2009

Репутация: 14
Всего: 17



String::Diff ?
PM   Вверх
mishnik
Дата 1.5.2011, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 6.3.2011

Репутация: 1
Всего: 1



Suppir, 
я бы разбил на массив по слову в массиве и, если слово не совпадает, то
обрамлять <услугу>
слова пока научитесь сравнивать, а там и до букв дойдет;))
PM MAIL   Вверх
SkoobyDoo
Дата 1.5.2011, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 4.10.2007

Репутация: нет
Всего: нет



Suppir, мне кажется то, что предложил DurRandir, как раз ваш случай
Код

#!/usr/bin/env perl

use strict;
use warnings;
use String::Diff;
use utf8;
use open qw(:std :utf8);

my $str1 = 'О тарифе на услуги по передаче электрической энергии по сетям ОАО "Лесопромышленная холдинговая компания "Коношалес"';
my $str2 = 'О тарифе на услугу по передаче электрической энергии по сети ОАО "Лесопромышленная холдинговая компания "Коношалес"';

my @strs = String::Diff::diff(
  $str2, $str1,
  remove_open  => '<',
  remove_close => '>'
);

print $strs[0], "\n";
$strs[1] =~ s/\{|\}//g;
print $strs[1], "\n";

на выходе
Код

О тарифе на услуг<у> по передаче электрической энергии по сет<и> ОАО "Лесопромышленная холдинговая компания "Коношалес"
О тарифе на услуги по передаче электрической энергии по сетям ОАО "Лесопромышленная холдинговая компания "Коношалес"


Это сообщение отредактировал(а) SkoobyDoo - 1.5.2011, 23:36
PM MAIL   Вверх
Suppir
Дата 2.5.2011, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 20.4.2009

Репутация: нет
Всего: нет



SkoobyDoo, спасибо. А можно ли сделать то же самое, но с помощью Algorithm:diff ?
Просто string:diff нет в стандартном ActivePerl.
PM MAIL   Вверх
mishnik
Дата 2.5.2011, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 6.3.2011

Репутация: 1
Всего: 1



Suppir, 
в strawberry есть, Larry Wall именно им рекомендует пользоваться,
activeperl - все-таки плох
PM MAIL   Вверх
Suppir
Дата 2.5.2011, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 20.4.2009

Репутация: нет
Всего: нет



mishnik, дело в том, что мне нужно будет распространить скрипт по клиентам. У них стоят Perl 5.8, 5.10 и выше, в основном ActiveState (я раньше рекомендовал им). Устанавливать модули 95% пользователей не умеет (особенно, если требуется компилятор). Поэтому все скрипты пишу таким образом, чтобы хватило стандартного ActivePerl...

Добавлено @ 12:37
Strawberry я пробовал, когда он только появился. Оказалось, что поиск-замена с регулярными выражениями работает в нем на 30 - 50% медленней, чем в ActivePerl. Возможно, сейчас ситуация и исправилась, кто знает.

p.s. если ставить Strawberry, то какой лучше: тот что на оф. сайте или тот что с Padre?



Это сообщение отредактировал(а) Suppir - 2.5.2011, 12:41
PM MAIL   Вверх
shamber
Дата 2.5.2011, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: 17
Всего: 18



Suppir, а написать простенький скрипт для установки модуля с cpan, или локального зеркала если инета нет?
PM MAIL Jabber   Вверх
Suppir
Дата 2.5.2011, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 20.4.2009

Репутация: нет
Всего: нет



shamber, никогда не пробовал  smile 
PM MAIL   Вверх
mishnik
Дата 2.5.2011, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 6.3.2011

Репутация: 1
Всего: 1



Suppir, 
я бы ставил c padre
и далее с обязательным запуском строки 

Код

c:\strawberry\perl\bin\perl.exe -MCPAN -e "CPAN->upgrade('/^Padre/')"

и далее ставим любой модуль
Код

C:\strawberry\perl\bin>c:\strawberry\perl\bin\perl.exe -MCPAN -e "CPAN->install('String::Diff')"

PM MAIL   Вверх
shamber
Дата 2.5.2011, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: 17
Всего: 18



mishnik, зачем ему падре на клиентах?
PM MAIL Jabber   Вверх
Suppir
Дата 2.5.2011, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 20.4.2009

Репутация: нет
Всего: нет



Кстати, насколько я понял, этот padre также основан на Scintilla, как и SciTE.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0547 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.