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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> perl изменить регистр букв, регулярные выражения регистр 
:(
    Опции темы
burakov
Дата 20.2.2007, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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

типа 
иВаН - Иван.

Пожалуйста кусочек кода smile, если можно. Справку читать нет времени... 

Огромное спасибо.




--------------------
Нотный архив http://libnote.ru скачать ноты бесплатно
PM MAIL   Вверх
Shaggie
Дата 20.2.2007, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

$name='iVaN';
$name=ucfirst lc $name;



--------------------
Цитата(alina3000 @  6.3.2014,  10:47 Найти цитируемый пост)
Сорри что не по теме 
PM MAIL ICQ GTalk Jabber   Вверх
chaos
Дата 20.2.2007, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


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

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



давно не писал на перле. что то типо в этом роде
Код

$stroka[0] = uc($stroka[0]);
for ($n = 1; n < length($stroka); $n++)
    $stroka[$n] = lc($stroka[$n]);


Добавлено @ 10:41 
вот только думаю что возникнут проблемы с кирилицей

PM WWW   Вверх
Shaggie
Дата 20.2.2007, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



chaos, точно давно не писал.
Код

for ($n = 1; n < length($stroka); $n++) # ошибка, в коде нет переменной $stroka
# тогда уж
for ($n = 1; n < @stroka; $n++)



--------------------
Цитата(alina3000 @  6.3.2014,  10:47 Найти цитируемый пост)
Сорри что не по теме 
PM MAIL ICQ GTalk Jabber   Вверх
amg
Дата 20.2.2007, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Shaggie привел совершенно правильный код.
Чтобы избежать проблем с кодировкой, можно попробовать
Код

use locale;
use POSIX;
# setlocale(LC_CTYPE,"ru_RU.KOI8-R");
setlocale(LC_CTYPE,"ru_RU.CP1251");

Если в виндах это не сработает, то все равно легко сделать.
PM MAIL   Вверх
chaos
Дата 20.2.2007, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


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

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



Цитата

# ошибка, в коде нет переменной $stroka

кому как smile

Цитата

# тогда уж

тогда уж дело вкуса ;)

Это сообщение отредактировал(а) chaos - 20.2.2007, 11:01
PM WWW   Вверх
burakov
Дата 20.2.2007, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Друзья !!!
классные коды, но с кириллицей - ничего не получается (работаю я под windows).


--------------------
Нотный архив http://libnote.ru скачать ноты бесплатно
PM MAIL   Вверх
amg
Дата 20.2.2007, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



chaos, Ваш код - это правильный код Си (только доллары убрать) smile Чтобы он годился для Перла, надо завести две переменные (об этом, видимо, говорил Shaggie, строка не является одновременно массивом) и добавить {} вокруг тела цикла (даже если там всего одно выражение)
Код

$stroka = 'iVaN';
@stroka = split '', $stroka;
$stroka[0] = uc($stroka[0]);
for ($n = 1; n < length($stroka); $n++) {
    $stroka[$n] = lc($stroka[$n]);
}

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


Опытный
**


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

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



amg, все уже пропустили... smile 
в цикле for в фазе проверки цикла перед переменной n значок доллара пропущен. Так, к слову.

А у меня, кстати, тоже под виндой русские буквы не хотят работать. Кто нибудь знает, как это лечится smile 


--------------------
Цитата(alina3000 @  6.3.2014,  10:47 Найти цитируемый пост)
Сорри что не по теме 
PM MAIL ICQ GTalk Jabber   Вверх
amg
Дата 20.2.2007, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



burakov, попробуй так:
Код

$name='иВаН';
# Приводим в порядок англ. буквы
$name=ucfirst lc $name;
# И русские (за искл. ёЁ)
$name =~ s/([А-Я])/chr(ord($1-32))/eg;
$name =~ s/^[а-я]/chr(ord($1+32))/e;

Shaggie, попробуй тоже, а то мне проверить негде

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


Серийный программист
****


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

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



amg, а для юникода?
PM WWW   Вверх
burakov
Дата 20.2.2007, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вот я сделал это криво но зато работает - проверил для винды

Код


$name='иВан';
print "$name\n";


$name =~ tr/(А-Я)(A-Z)/(а-я)(a-z)/;
@NAME = split ('', $name);
$NAME[0] =~ tr/а-я/А-Я/;
$name=join ('', @NAME);

print "$name\n";



теперь хочу вывыести это дело в sub &name (подпрограмму) и чтобы она брала переменную, какую подставишь типа
&name($name), но опыта не имею....
подскажите нужно както объявить переменную $name в подпрограмме ЛОКАЛЬНО и вообщем то массив тоже, чтобы они не помешали основному коду программы... 




--------------------
Нотный архив http://libnote.ru скачать ноты бесплатно
PM MAIL   Вверх
amg
Дата 20.2.2007, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(chaos @  20.2.2007,  11:51 Найти цитируемый пост)
amg, а для юникода?

Не знаю, никогда не сталкивался. use utf8 ? Вскоре появятся опытные люди и скажут.
PM MAIL   Вверх
chaos
Дата 20.2.2007, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


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

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



Цитата(amg @ 20.2.2007,  13:36)
1. надо завести две переменные (об этом, видимо, говорил Shaggie)

2. строка не является одновременно массивом

3. и добавить {} вокруг тела цикла (даже если там всего одно выражение

теперь мои замечания smile
1. я могу ни чего не заводить, ибо язык позволяет. а то что кто-то там может забыть это сделать это его проблемы. я показал то что требовалось(хоть и не совсем правельно smile ), а не готовый скрипт

2. запамятовал, бывает

3. тоже запамятовл(в данном примере)
а вот пример где не надо
Код

print for(0..10);


Это сообщение отредактировал(а) chaos - 20.2.2007, 11:57
PM WWW   Вверх
amg
Дата 20.2.2007, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(burakov @  20.2.2007,  11:54 Найти цитируемый пост)
теперь хочу вывыести это дело в sub &name (подпрограмму) и чтобы она брала переменную, какую подставишь типа&name($name), но опыта не имею....подскажите нужно както объявить переменную $name в подпрограмме ЛОКАЛЬНО и вообщем то массив тоже, чтобы они не помешали основному коду программы...

Код
$name='иВан';
print "$name\n";
$name = Ucfirst($name);
print "$name\n";

sub Ucfirst { # Кроме ёЁ и только для win
  my $name = $_[0];
  $name =~ tr/А-ЯA-Z/а-яa-z/;
  my @NAME = split ('', $name);
  $NAME[0] =~ tr/а-яa-z/А-ЯA-Z/;
  $name=join ('', @NAME);
  return $name;
}


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


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

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


 




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


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

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