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

Поиск:

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


Новичок



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

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



Как выделить под строковую переменную определенную длинну.
например $: = "$name $adress"
необходимо чтобы переменная $name всегда занимала 20 символов в строке.
smile
PM MAIL   Вверх
korob2001
Дата 1.4.2006, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

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



Код

my $name = sprintf("%20s", "Denis");



--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
Ivan Kolesnikov
Дата 3.4.2006, 06:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 9.3.2005
Где: г. Новокузнецк

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



Или
Код

my $name = sprintf("%-20s", "Denis");

Если пробелы нужно добавлять справа, а не слева
--------------------
PM MAIL ICQ   Вверх
SkyFlex
Дата 3.4.2006, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



а равное количество пробелов справа и слева можно ставить с помощью sprintf?
PM MAIL   Вверх
korob2001
Дата 3.4.2006, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

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



Цитата(SkyFlex @ 3.4.2006, 14:41 Найти цитируемый пост)
а равное количество пробелов справа и слева можно ставить с помощью sprintf?

А зачем тебе? smile


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
SkyFlex
Дата 4.4.2006, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



ну да...в принципе мне это не нужно...так для сведения )
подскажите мне лучше как действуют enable и disable.
естьпроцедура sub a {...}, которая выполняет ряд действий.
возможно ли сделать enable(a) или disable(a).
А над блоком можно ли произвести подобные действия?
И как можно задать приоритет на выполнение процедур?

Это сообщение отредактировал(а) SkyFlex - 4.4.2006, 10:18
PM MAIL   Вверх
SkyFlex
Дата 4.4.2006, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Обрабатываю строки:
'Иван Петров'
'ИВАН Петров'
'иван ПЕТРОВ'
'Петр иванов'
и т.д. множество имен и фамилий.
Необходимо если встретится имя иван вне зависимости от регистра обработать и вывести в файл фамилию.
Подскажите регулярное выражение

Это сообщение отредактировал(а) SkyFlex - 4.4.2006, 13:36
PM MAIL   Вверх
sharq
Дата 4.4.2006, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Perl Liker
**


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

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



SkyFlex,
Код

/\bиван\b/i


На некоторых машинах, придется установить локаль:
Код

use locale;
use POSIX qw (locale_h);
setlocale(LC_CTYPE, 'ru_RU.CP1251');
setlocale(LC_ALL, 'ru_RU.CP1251');


smile



--------------------
[color=gray]There's More Than One Way To Do It[/color]
PM MAIL WWW ICQ Skype   Вверх
BlackLFL
Дата 12.4.2006, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(SkyFlex @ 4.4.2006, 10:54 Найти цитируемый пост)
подскажите мне лучше как действуют enable и disable.
естьпроцедура sub a {...}, которая выполняет ряд действий.
возможно ли сделать enable(a) или disable(a).


perldoc lock
Цитата

    lock THING
            This function places an advisory lock on a shared variable, or
            referenced object contained in *THING* until the lock goes out
            of scope.

            lock() is a "weak keyword" : this means that if you've defined a
            function by this name (before any calls to it), that function
            will be called instead. (However, if you've said "use threads",
            lock() is always a keyword.) See threads.


PM WWW   Вверх
SkyFlex
Дата 4.5.2006, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



$_='Дождь на улице'
@x=split(/ /,$_);
#необходимо убрать из массива @x элементы длина которых меньше 3
#т.е. в данном примере 'на'
Подскажите, пожалуйста, если ли функция исключения из массива элементов... 

Это сообщение отредактировал(а) SkyFlex - 4.5.2006, 16:59
PM MAIL   Вверх
korob2001
Дата 5.5.2006, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

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



Насчёт вывода фиксированной строки выровненной по центру, написал такую подпрограмму:
Код
#!/usr/bin/perl -w
use strict;

sub  fixed_string {
    my $str   = shift || "";
    my $len   = shift || 80;
    my $align = shift || "left";
    return "" unless $str;
    if ( lc($align) eq "left" ) {
         return sprintf("%-${len}s", $str);
    } elsif ( lc($align) eq "right" ) {
         return sprintf("%${len}s", $str);
    } else {
         my $l = int( ($len / 2) - (length($str) / 2) );
         return sprintf("%${len}s", " " x $l . $str . " " x $l);
    }
}

my $name = fixed_string("Denis", 20, "center");
print "xxx\[$name\]xxx";

По поводу исключения елементов массива, длина которых меньше 3-х символов, то было бы не плохо создать отдельную тему для данного вопроса. Пожалуйста, соблюдайте правила форума.
Исключить такие элементы можно пройдя в цикле по всему массиву и одбросить не нужные елементы. Например:
Код
#!/usr/bin/perl -w
use strict;

# Тестовый массив
my @arr = ("This", "is", "a", "array");
# Массив в который будем
my @res = ();
# Минимально допустимая длина элемента, в символах
my $min = 3;

for (@arr) { push(@res,$_) if length($_) >= $min };

# выводим содержимое массива
print join("\n", @res);
  

Это сообщение отредактировал(а) korob2001 - 5.5.2006, 23:25


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
alyam
Дата 22.8.2006, 02:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



обрабатываю строки:
'^(.*) (рубль|рублей|рубля)\.$';

нужно вывести $1 $2, 
$2 при этом должно быть в верхнем регистре. подскажите пожалуйста. 
Можно конечно использовать схему =~s///, мб есть проще способ?
PM MAIL   Вверх
Nab
Дата 22.8.2006, 02:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(alyam @  22.8.2006,  02:16 Найти цитируемый пост)
обрабатываю строки:
'^(.*) (рубль|рублей|рубля)\.$';
Как именно?

Цитата(alyam @  22.8.2006,  02:16 Найти цитируемый пост)
нужно вывести $1 $2, 
что мешает?

Цитата(alyam @  22.8.2006,  02:16 Найти цитируемый пост)
$2 при этом должно быть в верхнем регистре. подскажите пожалуйста. 
 Смотрите функции uc, ucfirst, lc, lcfirst и sprintf.


Цитата(alyam @  22.8.2006,  02:16 Найти цитируемый пост)
Можно конечно использовать схему =~s///, мб есть проще способ?
Куда уж проще smile


--------------------
 Чтобы правильно задать вопрос нужно знать больше половины ответа...
Perl Community 
FREESCO in Ukraine 
PM MAIL   Вверх
alyam
Дата 22.8.2006, 04:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



вывести надо в переменную $:
$:="$1 $2"
и как тут использовать функцию uc?

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


Эксперт
***


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

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



Например:
$: = "$1 " . uc($2);
(точка - оператор конкатенации (слияния) строк).
Чтобы это работало с русскими буквами, нужно подключить локаль (см. выше).

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


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

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


 




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


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

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