Искусство программирования для Unix - Реймонд Эрик Стивен
Шрифт:
Интервал:
Закладка:
3
03
ЕТХ
19
13
DC3
35
23
#
51
33
3
67
43
С
83
53
S
99
63
с
115
73
s
4
04
EOT
20
14
DC4
36
24
$
52
34
4
68
44
D
84
54
T
100
64
d
116
74
t
5
05
ENQ
21
15
NAK
37
25
%
53
35
5
69
45
E
85
55
U
101
65
e
117
75
u
6
06
АСК
22
16
SYN
38
26
&
54
36
6
70
46
F
86
56
V
102
66
f
118
76
v
7
07
BEL
23
17
ETB
39
27
t
55
37
7
71
47
G
87
57
w
103
67
g
119
77
w
8
08
BS
24
18
CAN
40
28
(
56
38
8
72
48
H
88
58
X
104
68
h
120
78
X
9
09
нт
25
19
EM
41
29
)
57
39
9
73
49
I
89
59
Y
105
69
i
121
79
У
10
0А
LF
26
1А
SUB
42
2A
*
58
ЗА
74
4A
J
90
5A
Z
106
6A
j
122
7A
z
11
OB
VT
27
IB
ESC
43
2B
+
59
3B
;
75
4B
К
91
5B
[
107
6B
k
123
7B
12
ОС
FF
28
1С
FS
44
2C
i
60
3C
<
76
4C
L
92
5C
108
6C
1
124
7C
13
0D
CR
29
ID
GS
45
2D
-
61
3D
=
77
4D
M
93
5D
]
109
6D
ш
125
7D
14
0Е
SO
30
IE
RS
46
2E
62
3E
>
78
4E
N
94
5E
A
110
6E
n
126
7E
-
15
0F
SI
31
IF
US
47
2F
/
63
3F
?
79
4F
О
95
5F
111
6F
о
127
7F
DEL
Данный пример почти тривиален, однако он, тем не менее, иллюстрирует преимущества генерации как простого, так и особого кода. Подобные методики могли бы применяться для более крупных программ, предоставляя, соответственно, еще большие преимущества.
9.2.2. Учебный пример: генерация HTML-кода для табличного списка
Предположим, что требуется поместить страницу табличных данных на Web-страницу. Необходимо, чтобы первые несколько строк выглядели, как в примере 9.6.
Пример 9.6. Необходимый формат вывода для таблицы звезд
Aalat David Weber The Armageddon Inheritance
Aelmos Alan Dean Foster The Man who Used the Universe
Aedryr Steve Miller/Sharon Lee Scout's Progress
Aergistal Gerard Klein The Overlords of War
Afdiar L. Neil Smith Tom Paine Maru
Agandar Donald Kingsbury Psychohistorical Crisis
Shadowkill
Aghirnamirr Jo Clayton
Примитивнейший способ решения данной задачи заключался бы в написании вручную HTML-кода для необходимого внешнего представления. Таким образом, каждый раз, когда потребуется добавить новое имя, придется вручную писать еще один набор тегов <tr>H<td> для новой записи. Такая необходимость очень быстро стала бы утомительной. Но еще хуже то, что при изменении формата списка каждую запись потребуется кодировать вручную.
Внешне разумный способ решить данную проблему заключался бы в том, чтобы внести данные в трехстолбцовую таблицу в базе данных, а затем использовать некоторую причудливую CGI-методику71 или поддерживающий базы данных шаблонный процессор, например, РНР для создания страницы на лету. Однако, предположим, разработчику известно, что список не будет изменяться очень часто, и не требуется запускать сервер баз данных для того, чтобы отображать данные, а также нежелательно загружать сервер излишним CGI-трафиком.
Существует простое решение: поместить данные в файл в простом табличном формате, см. пример 9.7.
Пример 9.7. Модель таблицы звезд
Aalat :David Weber
Aelmos :Alan Dean Foster
Aedryr :Steve Miller/Sharon Lee
Aergistal :Gerard Klein
Afdiar :L. Neil Smith
Agandar :Donald Kingsbury
Aghirnamirr :Jo Clayton
The Armageddon Inheritance The Man who Used the Universe Scout's Progress The Overlords of War Tom Paine Maru Psychohistorical Crisis Shadowkill
Можно было бы обойтись без явного использования двоеточия в качестве разделителя полей, используя модель, содержащую в качестве разделителя два или более пробела. Однако явный разделитель предохраняет от ошибок, связанных со случайным двойным нажатием пробела в процессе редактирования значений полей.
Затем создается сценарий в shell, Perl, Python или Tel, который преобразовывает данный файл в HTML-таблицу. Сценарий запускается каждый раз после добавления новой записи. Способ старой школы Unix был бы связан с почти нечитаемым вызовом sed(1)