русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Строки и строковые функции


Дата добавления: 2013-12-23; просмотров: 623; Нарушение авторских прав


Строка констант - это последовательность символов, заключенная в двойные кавычки, как например, "abc", "hello, everyone".Строка констант может содержать последовательности escape языка программирования Си для специальных символов.

Строковые выражения создаются путем слияния констант, переменных, имен полей, элементов массива, функций и других выражений.

Программа:

{ print NR ":" $0 }

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

В табл. 5 приведены встроенные строковые функции, поддерживаемые awk. В этой таблице r представляет собой регулярное выражение (либо как строка, либо как /r/), s и t - строковые выражения, n и p - целые числа.

Таблица 5 Встроенные строковые функции awk

Функция Описание
gsub(r, s) Глобальная замена s на r в текущей записи; возвращает количество замененных символов
gsub(r,s, t) Глобальная замена s на r в строке t, возвращает количество замененных символов
index(s,t) Возвращает позицию t в s: 0 - если t нет в s
length(s) Возвращает длину s
matgch(s,r) Возвращает позицию s, в которой встречается r; 0 - если r не встретилось
split(s,a) Разделяет s на массив a по FS; возвращает число полей
split(s,a,r) Разделяет s на массив a по r; возвращает число полей
sprintf(fmt,expr-list) Возвращает expr-list, отформатированный в соответствии с форматом строки fmt
sub(r,s) Замещает s на первое r в текущей записи, возвращает количество замен
sub(r,s,t) Заменяет s на первое r в строке t, возвращает количество замен
substr(s,p) Возвращает индекс s, начиная с позиции p
substr(s,p,n) Возвращает подсказку s длиной n, начиная с позиции p

 



Функции sub и gsub сформированы после команды замены в текстовом радакторе ed. Функция gsub(r,s,t) заменяет успешное появление подстрок, найденных при помощи регулярного выражения r с заменой строки s в целевой строке t. Функция gsub(r,s) является синонимом gsub(r,s,$0). Например, программа:

{ gsub(/USA/, "United States"); print }

преобразует ввод, меняя появление "USA" на "Unites States". Функция sub подобна ей, за исключением того, что она заменяет первую найденную подстроку в целевой строке.

Функция index(s,t) возвращает левую крайнюю позицию, с которой строка t начинается в s. Первый символ в строке начинается с позиции 1. Например,

index("banana", "an")

возвращает 2.

Функция length возвращает число символов в строке; так:

{ print length($0), $0 }

печатает каждую запись, а перед ней ее длину. ($0 не включает в вводную запись разделитель). Программа:

length($1) > max { max = length($1); name = $1 }

END { print name }

применительно к файлу countries распечатывает наибольшее имя страны:

Australia

Функция match(s,r) возвращает позицию в строке s, в которой появилось регулярное выражение r, либо 0, если оно не найдено. Эта функция также устанавливает две встроенные переменные RSTART и RLENGTH. RSTART принимает значение начальной позиции, найденной в строке, это значение равно возвращаемому значению. RLENGTH принимает значение длины найденной строки. (Если строка не найдена, то RSTART равно 0, а RLENGTH равно -1). Например, следующая программа ищет появление буквы i и за ней сразу или через один символ следует буква a:

{ if (match($0, /i.?a/))

{ print RSTART, RLENGTH, $0 }

Относительно файла countries получим следующий вывод:

17 2 USSR 8650 262 Asia

26 3 Canada 3852 24 North America

3 3 China 3692 866 Asia

24 3 USA 3615 219 North America

27 3 Brazil 3286 116 South America

8 2 Australia 2968 14 Australia

4 2 India 1269 637 Asia

7 3 Argentina 1072 26 South America

17 3 Sudan 968 19 Africa

6 2 Algeria 920 18 Africa

Функция sprintf(format, expr1, expr2, ..., exprn) возвращает (без печати) строку, содержащую expr1, expr2, ..., exprn, отформатированную в соответствии со спецификацией printf в строке format. Выражение:

x = sprintf("%10s %6d", $1, $2)

присваивает x строку, полученную при форматировании $1 и $2 как 10-символьных строк и десятичное число в поле шириной как минимум 6 знаков.

Функция substr(s,p,n) возвращает подстроку s, которая начинается с позиции p и имеет длину не менее n символов. Если используется функция substr(s,p), то подстрока направляется в конец s, так что она состоит из индекса s, начинающегося с позиции p. Например, мы можем сократить имена стран в файле countries до трех символов, вызвав программу:

{ $1 = substr($1, 1, 3); print }

В итоге получим:

USS 8650 262 Asia

Can 3852 24 North America

Chi 3692 866 Asia

USA 3615 219 North America

Bra 3286 116 South America

Aus 2968 14 Australia

Ind 1269 637 Asia

Arg 1072 26 South America

Sud 968 19 Africa

Alg 920 18 Africa

Обратите внимание, что установка $1 в программе приводит к тому, что awk заново вычисляет $0 и, кроме того, поля разделяются пробелами (значение по умолчанию для OFS), но не табуляцией.

Чтобы слить строки, надо просто записать их одна за другой. Например, для файла countries:

{ s = s substr($1, 1, 3) " " }

END { print s }

печатает:

USS Can Chi USA Bra Aus Ind Arg Sud Alg



<== предыдущая лекция | следующая лекция ==>
Арифметические действия | Номер или строка


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.004 сек.