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

О проекте

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

MySQL

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

Хостинг

Другое








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

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

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

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

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

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

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

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

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

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

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

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



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




Руководство пользователя для 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