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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> аналог у substr, как убрать последние 2 символа? 
:(
    Опции темы
alyam
Дата 13.9.2006, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



например есть предложение:
первое пятидесятое
мне нужно получить перв.пятидесят т.е. убрать окончание
пытаюсь делать так:
@item=split(/ /,$1);
foreach $i (@item){
$i=substr($i,0,3);}
$wpn=join('.',@item);

не получается убрать только последние 2 символа у слова, потому что слова все неодинаковой длины.
подскажите пожалуйста правильное решение

Это сообщение отредактировал(а) alyam - 13.9.2006, 11:04
PM MAIL   Вверх
Danissimo
Дата 13.9.2006, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



@item = split / /, $1;
foreach (@item) {
    chop;
    chop;
}
$wpn=join('.',@item);

PM MAIL   Вверх
alyam
Дата 13.9.2006, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



получилось спасибо

Это сообщение отредактировал(а) alyam - 13.9.2006, 11:21
PM MAIL   Вверх
nitr
Дата 13.9.2006, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



а вот лучше ;)

Код

#!/usr/bin/perl -w
my $str = 'первое пятидесятое';
$str =~ s/\S{2}(\s|$)/$1/g;
print $str;


Добавлено @ 11:27 
alyam, память и время ;) экономия ё-маё...

Это сообщение отредактировал(а) nitr - 13.9.2006, 11:28


--------------------
PM   Вверх
alyam
Дата 13.9.2006, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



а в этой конструкции как слова в str объеденить через точку?
PM MAIL   Вверх
nitr
Дата 13.9.2006, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



ну к примеру так:
Код

#!/usr/bin/perl -w
my $str = 'первое пятидесятое';
$str =~ s/\S{2}\s/./g;
$str =~ s/\S{2}$//;
print $str;


Добавлено @ 12:00 
ну а если будет такая строка, то
Код

#!/usr/bin/perl -w
my $str = 'первое пятидесятое пятое семидесятое';
$str =~ s/(\S+?)\S{2}\s(\S+?)\S{2}(\s|$)/$1.$2$3/g;
print $str;


Добавлено @ 12:00 
это решение более универсально... ;)

Добавлено @ 12:01 
если считать такое сочетание слов smile рег. выражения это неанализатор, с помощью рег. выражений можно его сделать ;)

Это сообщение отредактировал(а) nitr - 13.9.2006, 11:50


--------------------
PM   Вверх
alyam
Дата 13.9.2006, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



а если число слов в предложении неограничено и произвольно?
и если в предложении встречаются предлоги на в с со над, которые надо бы убрать. вообщем убрать слова, в которых число символов меньше 3
можно с помощью регулярных выражений сделать такое?

Это сообщение отредактировал(а) alyam - 13.9.2006, 12:06
PM MAIL   Вверх
nitr
Дата 13.9.2006, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



alyam, создавай анализатор smile тебе даж придуманый тобою способ не будет работать! smile Мой способ работает для данного случая, а не 
Цитата(alyam @  13.9.2006,  12:03 Найти цитируемый пост)
а если число слов в предложение неограничено и произвольно?




--------------------
PM   Вверх
alyam
Дата 13.9.2006, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



я не настолько хорошо знаю perl  smile 
PM MAIL   Вверх
nitr
Дата 13.9.2006, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



alyam, как у тебя вообще получается такой текст, что за задачка такая? smile 


--------------------
PM   Вверх
alyam
Дата 13.9.2006, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



у меня в задаче вообще-то не встречается слов в предложении больше 5. но создать универсальный код, подходящий для любых предложений было бы лучше.
к тому же в твоем последнем примере слова объединяются точкой как пара. а надо полностью все слова объеденить 
PM MAIL   Вверх
nitr
Дата 13.9.2006, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



я как раз и делал как пару smile хееее

Добавлено @ 12:14 
используй предыдущий smile
где две регулярки

Добавлено @ 12:15 
этот
Код

#!/usr/bin/perl -w
my $str = 'первое пятидесятое пятое семидесятое';
$str =~ s/\S{2}\s/./g;
$str =~ s/\S{2}$//;
print $str;



--------------------
PM   Вверх
alyam
Дата 13.9.2006, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



это нам преподаватель в университете такие задачи дает. зверюга )
PM MAIL   Вверх
Danissimo
Дата 13.9.2006, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Если препод, то я бы рекомендовал самому разобраться. Если, конечно, программировать собираешься в будущем.

По поводу задачи. Давай переформулируем условие: в предложении, состоящим из максимум 5 слов (включая предлоги, союзы, частицы и пр.), выделить числительные и, отрезав у них последние две буквы (вероятно, окончания), объединить в одну строку, разделяя обрезанные числительные точкой.

На что похоже? На семантический анализ. Регулфрные выражения в общем виде не решают подобной задачи. Они слишком "слабые". Регулярные выражения способны анализировать регулярные языки. Твоя же задача относится к минимум контекстно-свободным языкам. Максимум -- к контекстно-зависимым. Так что в общем случае регулярные выражения не помогут.

nitr был прав, говоря, что тебе следует построить анализатор. Или не замахиваться на общий случай =)
PM MAIL   Вверх
nitr
Дата 13.9.2006, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



для данного, поставленного вопроса уже 3 ответа smile
а если это учёба, то имхо лекции были по теме ;) или спроси курс по-старше smile))


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


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

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


 




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


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

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