Ну хорошо, давайте еще раз посмотрим: вот программа
#!/usr/bin/rexx
/*
Всё это будет работать так, как задумано, если:
1) <div class="заголовок">1 июня 2005</div> — на одной строке,
без переносов, ДИВы и классы в точности, как здесь, с точностью до
количества пробелов.
2) <div class="ученик"><span>Ваня Иванов</span></div> — на одной строке,
без переносов, ДИВы и классы в точности, как здесь, с точностью до
количества пробелов.
3) <div id=904 class="оценка">87 баллов</div> — тоже на одной строке.
В этой строке «<div id=904» мы игнорируем, начинаем распознавать с
« class="оценка">».
4) Здесь мы распознаем 3 типа строк:
- <div class="заголовок">1 июня 2005</div>
- <div class="ученик"><span>Ваня Иванов</span></div>
- <div id=613 class="оценка">99 баллов</div>
Все остальные данные игнорируются.
Предполагается, что в читаемом файле сначала встречается строка
ПЕРВОГО типа, потом встречается строка ВТОРОГО типа, потом ТРЕТЬЕГО,
потом опять ВТОРОГО, ТРЕТЬЕГО и т. д. */
FILE = 'source.html'
DAT_01 = '<div class="заголовок">'
DAT_02 = '</div>'
NAM_01 = '<div class="ученик"><span>'
NAM_02 = '</span></div>'
SCO_01 = ' class="оценка">'
SCO_02 = '</div>'
ADATE = '<NO_DATE>' -- На всякий случай. Если в выводе
ANAME = '<NO_NAME>' -- появится это, значит, что-то
SCORE = '<NO_SCORE>' -- не то в формате файла.
TAB = d2c(9) -- символ с кодом 9, т.е. табуляция
say 'Lines in file:' lines(FILE) -- это для отладки
do while lines(FILE) > 0
A1 = linein(FILE)
if pos(DAT_01, A1)>0 & pos(DAT_02, A1)>0 then -- в этой строке дата,
parse var A1 (DAT_01) ADATE (DAT_02) -- достаём её.
if pos(NAM_01, A1)>0 & pos(NAM_02, A1)>0 then -- в этой строке имя,
parse var A1 (NAM_01) ANAME (NAM_02) -- достаём его.
if pos(SCO_01, A1)>0 & pos(SCO_02, A1)>0 then do -- в этой строке оценка,
parse var A1 (SCO_01) SCORE (SCO_02) -- достаём её...
say ADATE || TAB || ANAME || TAB || SCORE -- и печатаем дату имя оценку
/*
Вот это еще я добавил на всякий случай: после того, как оценка напечатана,
мы обнуляем имя, поэтому, если дальше встретится опять оценка, а не имя,
в выводе сразу будет видно, что ЧТО-ТО ПОШЛО НЕ ТАК. */
ANAME = '<NO_NAME>'
end
end /* while lines(FILE) */
вот наш файл source.html
<div class="заголовок">1 июня 2005</div>
далее код, в нем помимо прочего
<div class="ученик"><span>Ваня Иванов</span></div>
<div id=613 class="оценка">99 баллов</div>
далее еще код, в нем ниже
<div class="ученик"><span>Петя Петров</span></div>
<div id=904 class="оценка">87 баллов</div>
потом еще много кода, в среднем на странице по 10 учеников и, соответственно, столько же оценок
вот прога работает на вашем файле:
sol@eee:~$ rexx 1prog.rexx
Lines in file: 1
1 июня 2005 Ваня Иванов 99 баллов
1 июня 2005 Петя Петров 87 баллов
sol@eee:~$
Попробуйте у себя это воспроизвести вообще без изменений, с моим «файлом» source.html
И по результатам будем разбираться.
Пользователь добавил сообщение 08 Апреля 2016, 10:32:06:
А, уже заработало, ну тогда, если не срочно, через часок напишу свою задумку.