Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: экспорт из html  (Прочитано 3987 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн lead

  • Автор темы
  • Новичок
  • *
  • Сообщений: 21
    • Просмотр профиля
Re: экспорт из html
« Ответ #15 : 07 Апреля 2016, 22:28:15 »
inkblack,   
Цитировать
Всё это будет работать так, как задумано, если:
   1) <div class="заголовок">1 июня 2005</div> — на одной строке,
      без переносов, ДИВы и классы в точности, как здесь, с точностью до
      количества пробелов.

А с этим придумать ничего не получится? Все установил, пока не робит, вылезает окно с надписью "чтобы выйти нажмите enter". Начал разбираться - действительно, в некоторых местах перенос, в некоторых классах дополнительно тег span, а в следующий раз его нет... В общем цирк с конями )

Пока в ручную вычищу один файл как надо под Ваши условия и посмотрим как заработает, может не в этом проблема.
пришло время переустановить шындос

Оффлайн inkblack

  • Старожил
  • *
  • Сообщений: 1216
    • Просмотр профиля
Re: экспорт из html
« Ответ #16 : 07 Апреля 2016, 22:44:31 »
Можно использовать пару силовых методов.

Во первых, если файлы не очень большие (<500 килобайт), читать файл целиком, а не по строкам, и работать с одной последовательностью символов.

Во вторых, использовать
Код: (PHP) [Выделить]
NAM_01 = '<div class="ученик">'
 NAM_02 = '</div>'
— без тегов <span> а потом их из имени убирать:
Код: (PHP) [Выделить]
ANAME = changestr('<span>', ANAME, '')
 ANAME = changestr('</span>', ANAME, '')

Пришлите образцы переносов и доп. тегов <span>

И вопрос, кто и где пишет "чтобы выйти нажмите enter"?
Делюсь знаниями, но их у меня мало!

Оффлайн lead

  • Автор темы
  • Новичок
  • *
  • Сообщений: 21
    • Просмотр профиля
Re: экспорт из html
« Ответ #17 : 07 Апреля 2016, 22:52:55 »
inkblack, файлы размером от 100 до 400кб

Цитировать
И вопрос, кто и где пишет "чтобы выйти нажмите enter"?

Все еще не доехал до дома, поэтому сижу под Windows 8.1 x64, а не Ubuntu. Скачал с оф.сайта, установил, на рабочем столе создал файл формата regina rexx programm "1.rexx", его и запускаю, вываливается окно regina.exe.
Завтра, конечно, попробую и под Ubuntu.



Протестировал пару скриптов из интернета, сама Регина работает.



Я кажется начинаю понимать   ;D

Какое "#!/usr/bin/rexx", я ж в Винде  :2funny:
« Последнее редактирование: 07 Апреля 2016, 23:08:43 от lead »
пришло время переустановить шындос

Оффлайн inkblack

  • Старожил
  • *
  • Сообщений: 1216
    • Просмотр профиля
Re: экспорт из html
« Ответ #18 : 07 Апреля 2016, 23:19:07 »
А, пока я писал коммент, вы уж и сами разобрались.))
(Нажмите, чтобы показать/скрыть)
« Последнее редактирование: 07 Апреля 2016, 23:21:50 от inkblack »
Делюсь знаниями, но их у меня мало!

Оффлайн lead

  • Автор темы
  • Новичок
  • *
  • Сообщений: 21
    • Просмотр профиля
Re: экспорт из html
« Ответ #19 : 07 Апреля 2016, 23:24:35 »
inkblack, запускается просто кликом

Код: (php) [Выделить]
say hello /* => HELLO */
Вывод:

Код: (php) [Выделить]
HELLO

Press ENTER key to exit...

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

ЗЫ
Еще раз убедился, что форточки - зло.



В общем не буду морочить Вам голову и впадать в ересь, завтра под рукой будет Debian 7 и Ubuntu 14, там все и протестирую.

А в целом занимательный язык, простой, а главное о нем даже в википедии пару строк всего.
Это ж если в параметре FILE передать URL, а парсить между тегами <html></html> самописный аналог wget получится  :)
« Последнее редактирование: 07 Апреля 2016, 23:31:37 от lead »
пришло время переустановить шындос

Оффлайн inkblack

  • Старожил
  • *
  • Сообщений: 1216
    • Просмотр профиля
Re: экспорт из html
« Ответ #20 : 07 Апреля 2016, 23:39:32 »
Вывод куда-то не туда ушел просто — это вряд ли.
Там опреатор SAY, он выдает на экран, как в вашем примере.
Скорее, ни одна строка с оценкой не распозналась.

Можно вставить отладочную печать в цикл.

Еще одна проблема может быть связана с тем, что в Вин конец строки — это CR LF,
а в файлах, может быть, у вас просто LF. Соответственно, когда вы запускаете эту прогу
под Вин, она, возможно, читает ВЕСЬ файл в одну строку, распознает Заголовок, запоминает...
А строк в файле больше нет, соответственно, она заканчивает работу и ничего не печатает.

Обиднее всего, что из-за подобных мелочей не удается понять, в чем проблема...



Кстати, язык этот упоминали Alfred Aho, Peter Weinberger и Brian Kernighan в своей знаменитой Awk Book:
Цитировать
The REXX command interpreter language for IBM systems is another language
in the same spirit, although with more emphasis on its role as a shell or command interpreter;
see, for example, M. F. Cowlishaw's The REXX Language (Prentice-Hall, 1985).
« Последнее редактирование: 07 Апреля 2016, 23:51:40 от inkblack »
Делюсь знаниями, но их у меня мало!

Оффлайн lead

  • Автор темы
  • Новичок
  • *
  • Сообщений: 21
    • Просмотр профиля
Re: экспорт из html
« Ответ #21 : 07 Апреля 2016, 23:50:53 »
inkblack, завтра что-то да прояснится.

Я вот все думаю насчет

Цитировать
Во первых, если файлы не очень большие (<500 килобайт), читать файл целиком, а не по строкам, и работать с одной последовательностью символов.

Вы имеете ввиду просто из всего файла забрать учеников, а после этого переходить к оценкам?

И я все еще не совсем понимаю какой будет выход. Или stdout > в новый файл?
пришло время переустановить шындос

Оффлайн inkblack

  • Старожил
  • *
  • Сообщений: 1216
    • Просмотр профиля
Re: экспорт из html
« Ответ #22 : 08 Апреля 2016, 00:03:24 »
Выход, да, можно stdout > в новый файл.

а читать файл целиком — это не заморачиваться с тем, как разобрать случай:
Код: (HTML5) [Выделить]
<div class="ученик"><span>Ваня Иванов</span></div>, а как —
Код: (HTML5) [Выделить]
<div class="ученик">
<span>
Петя Петров
</span>
</div>

Всё считываем за один раз, потом находим то, что между  <div class="ученик"> и </div>,  убираем оттуда
концы строк,  <span>,  всё такое прочее, получаем в итоге имя.
Делюсь знаниями, но их у меня мало!

Оффлайн lead

  • Автор темы
  • Новичок
  • *
  • Сообщений: 21
    • Просмотр профиля
Re: экспорт из html
« Ответ #23 : 08 Апреля 2016, 00:14:15 »
inkblack,

Цитировать
Всё считываем за один раз, потом находим то, что между  <div class="ученик"> и </div>,  убираем оттуда

Вот так скорее всего и сделаю, проще потом в текстовом редакторе автозамену <*> сделать на пустоту.
Просто встречаются вариации

Код: (html5) [Выделить]
<div class="ученик"><span>Ваня Иванов</span></div>
<div class="ученик">Ваня Иванов</div>
<div class="ученик" id="505"><span>Ваня Иванов</span></div>
<div class="ученик"><nofollow><span>Ваня Иванов</span></div>
пришло время переустановить шындос

Оффлайн inkblack

  • Старожил
  • *
  • Сообщений: 1216
    • Просмотр профиля
Re: экспорт из html
« Ответ #24 : 08 Апреля 2016, 01:09:56 »
Вот оно:
Код: (html5) [Выделить]
<div class="ученик" id="505"><span>Ваня Иванов</span></div>Здесь после  КЛАССА идет ИД. Это надо разбирать отдельно.
При таком разнообразии взаимного расположения тегов уже задумаешься,
может быть, библиотекой воспользоваться? Хотя сдаваться еще рано!
Трудности не принципиальные, а чисто на пару строк кода. Но уже завтра, я так понимаю.

Делюсь знаниями, но их у меня мало!

Оффлайн lead

  • Автор темы
  • Новичок
  • *
  • Сообщений: 21
    • Просмотр профиля
Re: экспорт из html
« Ответ #25 : 08 Апреля 2016, 10:03:03 »
inkblack, докладываю - regina-rexx в Debian запустилась с пол-пинка, stdout отрабатывает, новый файл создается, в нем - пусто  ???



Переписал html вручную - есть выход, все робит.
Ковыряю дальше, чтобы получилось и на оригинале, еще раз огромное спасибо.



Даже более того - делаю вывод не в txt, а сразу в csv - сразу разбивает по столбцам как надо!
« Последнее редактирование: 08 Апреля 2016, 10:22:09 от lead »
пришло время переустановить шындос

Оффлайн inkblack

  • Старожил
  • *
  • Сообщений: 1216
    • Просмотр профиля
Re: экспорт из html
« Ответ #26 : 08 Апреля 2016, 10:30:35 »
Ну хорошо, давайте еще раз посмотрим: вот программа
Код: (PHP) [Выделить]
#!/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
Код: (HTML5) [Выделить]
<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 учеников и, соответственно, столько же оценок

вот прога работает на вашем файле:
Код: (bash) [Выделить]
sol@eee:~$ rexx 1prog.rexx
Lines in file: 1
1 июня 2005 Ваня Иванов 99 баллов
1 июня 2005 Петя Петров 87 баллов
sol@eee:~$

Попробуйте у себя это воспроизвести вообще без изменений, с моим «файлом»  source.html
И по результатам будем разбираться.

Пользователь добавил сообщение 08 Апреля 2016, 10:32:06:
А, уже заработало, ну тогда, если не срочно, через часок напишу свою задумку.
« Последнее редактирование: 08 Апреля 2016, 10:32:06 от inkblack »
Делюсь знаниями, но их у меня мало!

Оффлайн lead

  • Автор темы
  • Новичок
  • *
  • Сообщений: 21
    • Просмотр профиля
Re: экспорт из html
« Ответ #27 : 08 Апреля 2016, 10:40:55 »
inkblack, вывод точь-в-точь как у вас, все гуд

теперь делаю везде перенос строки 

Код: (html5) [Выделить]
<div class="заголовок">
1 июня 2005</div>

вывод

Код: (html5) [Выделить]
Lines in file: 1
но уже что-то, на боевом-то файле просто пустота...

Копаю дальше



Теперь редактирую весь html в одну строку - в выводе только

Код: (html5) [Выделить]
1 июня 2005 Ваня Иванов   99 баллов
значит вариант с тем, чтобы просто убрать все переносы тоже не сработает. Курю дальше.
« Последнее редактирование: 08 Апреля 2016, 10:48:02 от lead »
пришло время переустановить шындос

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: экспорт из html
« Ответ #28 : 08 Апреля 2016, 11:08:10 »
Уже гораздо быстрее бы приложили образец 1 файла и строки которые надо из него получить.
Имхо учить дополнительный псевдо-язык «регина» то гораздо проще сделать на Pyhton, если нельзя одним башем обойтись…
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн inkblack

  • Старожил
  • *
  • Сообщений: 1216
    • Просмотр профиля
Re: экспорт из html
« Ответ #29 : 08 Апреля 2016, 12:28:08 »
(Нажмите, чтобы показать/скрыть)

Я в данный момент немного занят, поэтому после 14..15-00 вернусь к задаче, там работы на 30 мин. от силы.
Просто у меня есть небольшой опыт обработки такого рода  данных. На каком языке обрабатывать — вопрос второстепенный.
Главное — логика обработки. А делать мне удобнее на Rexx'е.
Делюсь знаниями, но их у меня мало!

 

Страница сгенерирована за 0.049 секунд. Запросов: 25.