Пятница, 24.11.2017, 10:25
Приветствую Вас Гость | RSS
Главная | Лекции | Регистрация | Вход
Меню сайта
Форма входа
Логин:
Пароль:
Категории раздела
Лекция [24]
Мини-чат
100
Поиск
Наш опрос
Оцените мой сайт
Всего ответов: 2
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0
    Программирование Perl
    Главная » Статьи » Лекция » Лекция

    Лекция 7.2: Текст, строки и символы

    Функции для работы со строками

    Функция lcfirst() возвращает значение строкового выражения, в котором только первый символ преобразован к нижнему регистру, например:

    $first_char_lower = lcfirst($text); # 'Perl' станет 'perl'

    К верхнему регистру ( upper case ) преобразовать текст можно с помощью функции uc(), которая возвращает значениесимвольного выражения, преобразованное к заглавным буквам.

     
    use locale;
    $upper_case = uc($text); # преобразовать к большим буквам
     

    Функция ucfirst() возвращает значение строкового выражения, в котором только первый символ преобразован к верхнему регистру. Так, например, можно записать имя собственное с заглавной буквы:

    $capitalized = ucfirst($name); # 'ларри' станет 'Ларри'

    Встроенная функция crypt() выполняет шифрование строки, переданной ей в качестве аргумента, используя второй аргумент в качестве "затравки" (salt) для шифрования:

     
    # незашифрованная строка из $plain шифруется в $crypted
    $crypted = crypt($plain, $salt);
     

    Эта функция не имеет парной расшифровывающей функции и чаще всего используется для сравнения открытого текста с существующей зашифрованной строкой, как это делается в следующем примере:

    if (crypt($plain, $salt) eq $crypted) {
     # открытый текст совпал с зашифрованным
    }

    Функция quotemeta() находит в символьном выражении метасимволы (о которых пойдет речь в следующей лекции) или escape-последовательности и возвращает строку, где у всех специальных символов отменено их особое значение: для этого перед каждым из них ставится символ обратной косой черты '\'.

    $string_with_meta = '\n \032 \x00 text \t \v "';
    $quoted = quotemeta($string_with_meta);
    # в $quoted будет '\\n\ \\032\ \\x00\ text\ \\t\ \\v\ \"'

    В Perl имеется несколько функций преобразования строкового представления числа в числовое значениеФункция hex()возвращает десятичное значение выражения, представленного как шестнадцатиричное число в виде строки:

     
    $hexadecimal_as_string = '0x2F';
    $decimal_number = hex($hexadecimal_as_string); # будет 47
     

    Функция oct() возвращает десятичное значение строкового выражения, представляющего запись восьмеричного числа:

    $octal_as_string = '0777';
    $decimal_number = oct($octal_as_string); # будет 511

    С помощью oct() можно также преобразовать к десятичному значению двоичное или шестнадцатиричное число, записанное в виде строки:

     
    $binary_as_string = '0b011001';
     $decimal_number = oct($binary_as_string); # будет 25
     $hexadecimal_as_string = '0x19';
     $decimal_number = oct($hexadecimal_as_string); # будет 25
     

    Ну а строку, содержащую число в десятичной системе счисления, можно преобразовать к числу, поместив ее в числовойконтекст:

    $pi_as_string = '3.141592653'; # число Пи в виде строки
    $circle_length = 2 * $pi_as_string * $radius;

    Функция sprintf() возвращает строку, которая сформирована в соответствии с правилами форматирования, заимствованными из языка C: на основе формата преобразования, заданного первым аргументом, в результирующую строку подставляются отформатированные значения из списка остальных аргументов функции. В общем виде вызов этой функции выглядит так:sprintf(ФОРМАТ, СПИСОК АРГУМЕНТОВ). В формате преобразования располагается любой текст, в котором могут присутствовать указания преобразования. Каждое указание начинается с символа процента (%) и заканчивается символом, определяющим преобразование. Основные преобразования приведены в таблице 7.2.

     
    Таблица 7.2. Преобразования в формате sprintf
    Преобразование Синоним Результат преобразования Мнемоника символа
    %%   Знак процента %
    %c   Символ с указанным номером в кодовой таблице Character
    %s   Строка String
    %d %i Целое со знаком в десятичном виде DecimalInteger
    %u   Целое без знака в десятичном виде Unsigned
    %b   Целое без знака в двоичном виде Binary
    %o   Целое без знака в восьмеричном виде Octal
    %x %X Целое без знака в шестнадцатеричном виде heXadecimal
    %e %E Целое с плавающей точкой в научной нотации Exponential
    %f %F Число с плавающей точкой в виде десятичной дроби Float
    %g %G Число с плавающей точкой в формате %e или %f  
     

    Между знаком процента и символом в указании преобразования можно использовать дополнительные параметры преобразования, основные из которых приведены в таблице 7.3.

     
    Таблица 7.3. Параметры преобразования в формате sprintf
    Параметр Выполняемое форматирование Пример параметров sprintf() Результатформатирования
    число Минимальная ширина поля вывода для результата преобразования; если она не задана или меньше ширины значения, то устанавливается равной ширине выводимого значения '<%5s>', 25 <   25>
    .число Количество цифр после десятичной точки в дробном числе '<%.5f>', 0.25 <0.25000>
    Максимальная ширина поля вывода, до которой усекается длинная строка '<%.5s>', '5' x 10 <55555>
    пробел Вывод пробела перед положительным числом '<% d>', 25 '< 25>'
    + Вывод плюса перед положительным числом '<%+d>', 25 '<+25>'
    0 Вывод нулей, а не пробелов при выравнивании по правому краю поля '<%05s>', 25 '<00025>'
    - Выравнивание значения по левому краю поля <%-5s>, 25 '<25 >'
    # Вывод перед восьмеричным числом 0, перед шестнадцатеричным числом 0x, перед двоичным числом 0b '<%#x>',25 '<0x19>'
     

    При выполнении sprintf() к очередному значению из списка аргументов применяется преобразование, результат которого вставляется в форматирующую строку на место указания преобразования. Например, если шаблон форматирования и аргументы функции sprintf() заданы так:

     
    $format = "'%12s' агента <%03d> = '%+-10.2f'";
    @list = ('Температура', 7, 36.6);
    $formatted_string = sprintf($format, @list);
     

    то после выполнения приведенного предложения в переменной $formatted_string будет содержаться такая отформатированная строка:

     
    ' Температура' агента <007> = '+36.60 '
     

    Преобразования в формате этого примера обозначают следующее:

     
    • %12s - преобразовать аргумент в строку (string) и поместить в поле шириной в 12 символов с выравниванием вправо (т. к. ширина поля положительная);
    • %03d - преобразовать аргумент в десятичное целое (decimal) и поместить в поле шириной в 3 цифры с ведущими нулями (т. к. ширина поля задана с ведущим нулем) и выравниванием вправо (поскольку ширина положительная);
    • %+-10.2f - преобразовать аргумент в дробное число (float) с явным знаком (т.к. указан +) и поместить в поле шириной в 10 цифр, из которых 2 отводятся на дробную часть, с выравниванием влево (поскольку ширина поля отрицательная).
     

    Функция sprintf() часто применяется для округления чисел - например, до трех знаков в дробной части:

     
    $rounded = sprintf("%.3f", 7/3); # в $rounded будет 2.333
     

    Полное описание форматов с самыми разными примерами их употребления можно прочитать в официальной документации:

     
    perldoc -f sprintf
     

    В дополнение к функции sprintf() имеется функция printf(), которая использует тот же самый формат преобразования, но выводит отформатированный результат в указанный выходной поток.

    Функции для работы с символами

    Иногда требуется работать не со строками и словами текста, а с его отдельными символами. В Perl есть необходимые средства работы с символами, хотя в нем нет специального типа данных, представляющих один символ, подобно типу char в других языках. Один символ из строки можно скопировать функцией substr($string, $index, 1).

     

    С помощью заимствованных из языка Pascal функций ord() и chr() выполняются преобразования символа (а точнее односимвольной строки) в его ASCII-код и наоборот:

     
    $code = ord($char); # ord('M') вернет число 77
    $char = chr($code); # chr(77) вернет строку 'M'
    # синоним: $char = sprintf("%c", $code);
     

    Разбить строку на отдельные символы и поместить их в массив можно с помощью уже знакомой функции split() с пустой строкой в качестве разделителя:

     
    @array_of_char = split('', $string);
     

    С помощью списков и нескольких вызовов функции substr() можно поменять в строке местами символы с указанными индексами, например, 1 и 11:

     
    $s = 'кОт видел кИта';
    (substr($s, 1, 1), substr($s, 11, 1)) = 
    (substr($s, 11, 1), substr($s, 1, 1));
    # в $s будет 'кИт видел кОта'
     

    Известная по лекции о списках функция reverse() в скалярном контексте возвращает значение текстового выражения, в котором символы переставлены в обратном порядке, например:

     
    $palindrom = 'А РОЗА УПАЛА НА ЛАПУ АЗОРА';
    $backwards = reverse($palindrom);
    # в $backwards будет 'АРОЗА УПАЛ АН АЛАПУ АЗОР А'
     

    Обрабатывать отдельные байты, в том числе и символы, можно также при помощи функций pack() и unpack(), которые предназначены для преобразования любых данных и будут рассмотрены в лекции, посвященной вводу-выводу.

    Категория: Лекция | Добавил: mazay (13.05.2014)
    Просмотров: 90 | Рейтинг: 0.0/0
    Всего комментариев: 0
    Добавлять комментарии могут только зарегистрированные пользователи.
    [ Регистрация | Вход ]
    Создать бесплатный сайт с uCozCopyright MyCorp © 2017