:: Visual Foxpro, Foxpro for DOS
Разбор HTM-файла через Excel
lili

Сообщений: 436
Откуда: Сыктывкар
Дата регистрации: 07.11.2005
Приветствую всех!
Есть такая задача - считать данные из htm-файла. Открываю его в Excel (поскольку с ним я из VFP работать умею, а с HTM - увы, нет), сохраняю как xls-файл и вроде бы все хорошо.
lFile1="MyFile.htm"
oExcel = createobject('Excel.Application')
#define xlExcel5 39
oDOC=oExcel.Workbooks.open(lFile1)
oExcel.DisplayAlerts = .F.
lFile2="MyFile.xls"
oDOC.saveas(lFile2,xlExcel5)
...
Но одна проблема - текстовые поля со значениями типа "06-90" в Excel безвозвратно переходят в дату "01.06.90".
Как-то можно это побороть?



Исправлено 1 раз(а). Последнее : lili, 10.04.20 13:26
Ratings: 0 negative/0 positive
Re: Разбор HTM-файла через Excel
WbrErr

Сообщений: 1960
Дата регистрации: 05.12.2006
В Excel файл можно импортировать, попутно указав тип данных для каждого поля. Достаточно включить макрорекордер и потом посмотреть получившийся код. Не знаю, что там будет с импортом HTM, но, думаю, никакой разницы.
Ratings: 0 negative/0 positive
Re: Разбор HTM-файла через Excel
sphinx
Автор

Сообщений: 31182
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
А можно прикрепить к сообщению архив с html-файлом?


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: Разбор HTM-файла через Excel
lili

Сообщений: 436
Откуда: Сыктывкар
Дата регистрации: 07.11.2005
Вот конкретный файл для примера. Поле "Исходящий номер порученного документа" - 06-90.
Ratings: 0 negative/0 positive
Re: Разбор HTM-файла через Excel
ssa

Сообщений: 13008
Откуда: Москва
Дата регистрации: 23.03.2005
lili
Открываю его в Excel (поскольку с ним я из VFP работать умею, а с HTM - увы, нет)
Интересная логика. А с текстовыми файлами вы умеете работать? А тип файла вы определяете строго по расширению? А если у файла поменять расширение вы сразу научитесь с ним работать?

------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: Разбор HTM-файла через Excel
ssa

Сообщений: 13008
Откуда: Москва
Дата регистрации: 23.03.2005
lili
Вот конкретный файл для примера. Поле "Исходящий номер порученного документа" - 06-90.
Вы не умеете найти в строке символов нужную комбинацию символов??

------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: Разбор HTM-файла через Excel
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Из HTML-документа можно построить DOM:
m.oDOM = CREATEOBJECT('HTMLfile')
m.oDOM.Write(html-текст)

Дальше в oDOM ищем тэги, разными методами поиска, здесь где-то тема встречалась, связанная с разбором странички из интерента.
Ratings: 0 negative/0 positive
Re: Разбор HTM-файла через Excel
lili

Сообщений: 436
Откуда: Сыктывкар
Дата регистрации: 07.11.2005
[quote of63]Из HTML-документа можно построить DOM:
[/quote]
Спасибо хоть за один ответ по существу. Попробую DOM.

[quote ssa]
Вы не умеете найти в строке символов нужную комбинацию символов??
/quote]
Дело в том, что я не знаю, какие там будут теги, содержание файла мне заранее не известно и нужно из него корректно информацию вытащить.



Исправлено 1 раз(а). Последнее : lili, 12.04.20 06:49
Ratings: 0 negative/0 positive
Re: Разбор HTM-файла через Excel
ssa

Сообщений: 13008
Откуда: Москва
Дата регистрации: 23.03.2005
[quote lili][quote of63]Из HTML-документа можно построить DOM:
[/quote]
Спасибо хоть за один ответ по существу. Попробую DOM.

[quote ssa]
Вы не умеете найти в строке символов нужную комбинацию символов??
/quote]
Дело в том, что я не знаю, какие там будут теги, содержание файла мне заранее не известно и нужно из него корректно информацию вытащить.[/quote]Думаете, незнание содержимого поможет при работе с DOM и прочими методами? Или думаете, что Excel просто по наитию определяет что в какую ячейку положить при импорте html? А намек на разбор текстового файла методами разбора текстового файла, конечно же, ну никак не могут быть по существу.


------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: Разбор HTM-файла через Excel
sphinx
Автор

Сообщений: 31182
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
Здесь есть готовый пример, как парсить HTML: forum.foxclub.ru


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: Разбор HTM-файла через Excel
lili

Сообщений: 436
Откуда: Сыктывкар
Дата регистрации: 07.11.2005
sphinx
Здесь есть готовый пример, как парсить HTML: forum.foxclub.ru
Спасибо, буду смотреть.
Ratings: 0 negative/0 positive
Re: Разбор HTM-файла через Excel
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
lili, вся твоя проблема проистекает от нерешаемой (решаемой только на начальном этапе решения, "первого приближения") задачи типа "умный компьютер найдет номер документа в любой структуре файла, ведь человек-то видит это беспроблемно, ну, а уж компьютер-то точно найдет". Комп не есть "ИИ", которого все ждут... или не ждут уже...(ИИ - искусственный интеллект, это просто программа), ИИ - это програмер, это ты.

... это слово "Исходящий номер порученного документа" (которое, может потом сократят до № документа"... Что ты тогда будешь делать? Как изменишь программу (ведь нужно будет ежеучастно отслеживать изменения в "формате" этого HTM...) Как это все будет устроено "автоматически" ?

Доб. Подскажу как это будет:
- никто не будет менять форматы на "компьютерные (записанные в "компьютерном" (и то, в приложениях, "протоколах обмена", часто пишут не прогеры, а сторонние люди, желающие выдать желаемое за физический протокол, как это и вышло в твоем случае - тебя заставили написать ИИ, точнее попытаться сделать, по вычленению № документа из недокументированного файла) протоколе обмена, на который можно сослаться при "разборках, кто виноват"), хотя... если "надавить", то и удается договориться. Пример - СБЕРБАНК ОНЛАЙН ДЛЯ ЮР ЛИЦ. Прекрасный тнтерфейс, и ПО на их стороне. Я к тому, что при наличии сил - возможны самые красивые и удобные фантазии, lili...
- изменения в тексте ячейки "Исходящий..." изменят и тебе не скажут (кстати, потому, что это не "компьютерный" формат данных - это длинное слово... хотя бывает и документируют такое)
- Серега (ssa) прав, в том смысле, что при таких обстоятельствах (непонятно, как найти это слово "Исходящий..."), можно обойтись и без DOM (без этой фигни жили до последних лет 5-10, и жили лучше), типа,
- в полном HTM найти слово "Исходящий..." (сумеешь?)
- перескочить на следующий тэг (тэг - это у нас угловые скобочки)
- считать значение между скобочек - это и будет твой номер

() действительно, DOM ничего физического не изменит, просто иногда прощще наблюдать структурированный текст в виде многовложенного обьекта (прости, Симпле с твоей ненавистью к ООП)

Надеюсь, не наврал. Пьян, борюсь с пандемией )

Ну, и нагорело. Мы видим проблы по своему, lili, не выноси вердикты, что "только офа, или сфинкс", сказал рационально, может оказаться, что это не совсем так. Даже не говорю что "не так", это как "так жениться на Глафире или как?". Осторожнее надо в словах...



Исправлено 12 раз(а). Последнее : of63, 14.04.20 01:34
Ratings: 0 negative/0 positive
Re: Разбор HTM-файла через Excel
lili

Сообщений: 436
Откуда: Сыктывкар
Дата регистрации: 07.11.2005
lili
sphinx
Здесь есть готовый пример, как парсить HTML: forum.foxclub.ru
Спасибо, буду смотреть.
Вот это помогло реально. Все получилось. Еще раз спасибо.
Ratings: 0 negative/0 positive
Re: Разбор HTM-файла через Excel
sphinx
Автор

Сообщений: 31182
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
Раз получилось - неплохо бы и сюда выложить решение, кому-то пригодится.


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: Разбор HTM-файла через Excel
lili

Сообщений: 436
Откуда: Сыктывкар
Дата регистрации: 07.11.2005
sphinx
Раз получилось - неплохо бы и сюда выложить решение, кому-то пригодится.
Ну, примерно так (без подробностей). Я знаю возможный список нужных мне реквизитов, считываю их значения и обрабатываю.
PROCEDURE p_pars
PARAMETERS p_file
oo = CREATEOBJECT('htmlfile')
oo.write(FILETOSTR(lFile))
oDoc = oo.body.document
oTables = oDoc.getElementsByTagName('table')
FOR EACH oTable IN oTables
lText=oTable.Rows.Item(0).innerText
IF ATC('Поля документа',lText)>0
LOOP
ENDIF
IF ATC('Название присединенного файла',lText)>0
LOOP
ENDIF
IF ATC('СтатусПоручение',lText)>0
=p_poruch()
LOOP
ENDIF
FOR EACH oRow IN oTable.Rows
lValue=NVL(oRow.cells.item(0).innerText,'') && реквизит
IF EMPTY(lValue)
LOOP
ENDIF
lZnach=NVL(oRow.cells.item(1).innerText,'') && значение
DO CASE
CASE lValue='Список исполнителей'
=p_ispol(lZnach)
CASE lValue='Регистрационный номер'
...
ENDCASE
ENDFOR
ENDFOR
RELEASE oo
Ratings: 0 negative/1 positive
Re: Разбор HTM-файла через Excel
sphinx
Автор

Сообщений: 31182
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
Вот спасибо! Может и самому пригодится. Мы больше XML парсим, но это тоже надо.

Если есть решения (пусть своей задачи) - их в копилку.

Удачи Вам!


------------------
"Veni, vidi, vici!"(с)




Исправлено 1 раз(а). Последнее : sphinx, 15.04.20 11:03
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 22 (Гостей: 22)

© 2000-2024 Fox Club 
Яндекс.Метрика