П О Р Т А Л                            
С Е Т Е В Ы Х                          
П Р О Е К Т О В                        
  
Поиск по сайту:
                                                 
Главная

О проекте

Web-мастеру
     HTML & JavaScript
     SSI
     Perl
     PHP
     XML & XSLT
     Unix Shell

MySQL

Безопасность

Хостинг

Другое








Самое читаемое:

Учебник PHP - "Для Чайника".
Просмотров 174964 раз(а).

Иллюстрированный самоучитель по созданию сайтов.
Просмотров 71896 раз(а).

Учебник HTML.
Просмотров 72036 раз(а).

Руководство по PHP5.
Просмотров 42644 раз(а).

Хостинг через призму DNS.
Просмотров 49115 раз(а).

Подборка текстов стандартных документов.
Просмотров 43058 раз(а).

Учебник PHP - Самоучитель
Просмотров 49402 раз(а).

Документация на MySQL (учебник & справочное руководство)
Просмотров 49639 раз(а).

Внешние атаки...
Просмотров 40198 раз(а).

Учебник PHP.
Просмотров 35218 раз(а).

SSI в примерах.
Просмотров 26516 раз(а).



 
 
| Добавить в избранное | Сделать стартовой | Помощь




Руководство пользователя для GNU Awk

16. Практические awk-программы

16.2 Разные awk-программы

16.2.4 Печать почтовых ярлыков

Это программа из "реального мира". *4* Она читает списки имен и адресов и генерирует почтовые ярлыки. Каждая страница ярлыков содержит 20 ярлыков, два поперек и десять сверху вниз. Адреса гарантированно не превышают пяти строк с данными. Каждый адрес отделяется от следующего строкой пробелов.


4 "Реальный мир" определяется как " программа действительно используется для какого-то дела."


Основная идея состоит в чтении данных для 20 ярлыков. Каждая строка каждого ярлыка запоминается в массиве строк. Единственное правило предназначено для заполнения массива строк и печати страницы после того, как будут прочитаны 20 ярлыков.

Правило BEGIN просто устанавливает в RS пустую цепочку, так что awk будет разделять записи строками пробелов (см. раздел 5.1 [Как ввод разделяется на записи], стр. 37). Оно устанавливает MAXLINES на 100, поскольку MAXLINE есть количество строк на странице (20 * 5 = 100).

Большинство работы делает функция printpage. Строки ярлыка запоминаются последовательно в массиве строк. Но они должны печататься горизонтально; Строка line[1] вслед за line[6], line[2] вслед за line[7], и т.д. Два цикла используются для этих действий. Внешний цикл с параметром i имеет шаг в 10 строк данных; это дает один ряд ярлыков. Внутренний цикл с параметром j пробегает строки в пределах ряда. Так как j проходит от 0 до 4, `i+j' есть j-я строка в ряду и `i+j+5' есть вход в следующий ряд. Вывод заканчивается подобно следующему:

line 1 line 6 line 2 line 7 line 3 line 8 line 4 line 9 line 5 line 10

В заключение, на строках 21 и 61, печатается дополнительная пустая строка, чтобы вывод выравнивался по ярлыкам. Это зависит от особенностей используемых ярлыков в то время, когда писалась программа. Вы также увидите, что имеются две пустые строки наверху и внизу.

Правило END устроено так, что подавляет последнюю страницу с ярлыками; количество данных может быть не кратно 20 ярлыкам.

# labels.awk
# Arnold Robbins, arnold@gnu.org, Public Domain # June 1992
# Программа печати ярлыков по 5 строк каждый,
# возможны пустые строки . Страницы ярлыков имеют по 2
# пустые строки вверху и внизу.
BEGIN - RS = "" ; MAXLINES = 100 "" function printpage( i, j) -
if (Nlines != 0)
return
printf ""n"n" # header
for (i = 1; i != Nlines; i += 10) -
if (i == 21 ---- i == 61)
print "" for (j = 0; j ! 5; j++) -
if (i + j ? MAXLINES)
break printf " %-41s %s"n", line[i+j], line[i+j+5] "" print "" ""
printf ""n"n" # footer for (i in line)
line[i] = "" ""
# главное правило -
if (Count ?= 20) -
printpage() Count = 0 Nlines = 0 "" n = split($0, a, ""n")
for (i = 1; i != n; i++)
line[++Nlines] = a[i] for (; i != 5; i++)
line[++Nlines] = "" Count++ ""
END " -
printpage() ""

Назад | Вперед
Содержание (общее) | Содержание раздела | Содержание подраздела



Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
 





Copyright © 2005-2016 Project.Net.Ru