Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.06.2011, 06:49   #1
Kachirus
Пользователь
 
Регистрация: 25.06.2011
Сообщений: 12
По умолчанию работа с данными из таблицы HTML

Доброе время суток.

Пред история:
Работаю в сфере телекоммуникаций. Приходится сталкиваться с обработкой данных которые собирают программы в автоматическом режиме. Данные выкладываются на сайт в форме таблицы HTML. Объем информации большой (более 500 строк и 20 столбцов). Ну очень необходима программка которая все будет делать в автоматическом режиме.

Ну а теперь собственно вопрос:
Перелапатил интернет и нигде не нашел исходного кода который бы выдергивал данные из таблицы HTML и работал бы с ними....

Я от Вас его не требую, подскажите в каком направлении двигаться.....

Спасибо...
Kachirus вне форума Ответить с цитированием
Старый 25.06.2011, 09:34   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

парсинг, примеров масса.
так же если там xhtml, то можно как xml разобрать.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 27.06.2011, 10:17   #3
Arsenx777
Delphi, c++, php
Форумчанин
 
Аватар для Arsenx777
 
Регистрация: 14.03.2011
Сообщений: 288
По умолчанию

А именно? че вы хатите вытаскивать с сайтов? html что ли? или таблицы?

Цитата:
Сообщение от Kachirus Посмотреть сообщение
Доброе время суток.
Ну а теперь собственно вопрос:
Перелапатил интернет и нигде не нашел исходного кода который бы выдергивал данные из таблицы HTML и работал бы с ними....
Вопрос какойто непонятный...
Мудр тот, кто знает нужное, а не многое.

Arsenx777 вне форума Ответить с цитированием
Старый 27.06.2011, 21:55   #4
dacorp
Пользователь
 
Регистрация: 12.06.2010
Сообщений: 48
По умолчанию

d.acorp@mail.ru Готов помочь.
dacorp вне форума Ответить с цитированием
Старый 28.06.2011, 20:53   #5
Kachirus
Пользователь
 
Регистрация: 25.06.2011
Сообщений: 12
По умолчанию

Цитата:
Сообщение от Arsenx777 Посмотреть сообщение
А именно? че вы хатите вытаскивать с сайтов? html что ли? или таблицы?



Вопрос какойто непонятный...
Почему не понятный... Вроде все доходчиво объяснил... "код который бы выдергивал данные из таблицы HTML и работал бы с ними...." По сути нужно таблицу с сайта загрузить в базу данных....

Вот страничка с таблицей....http://depositfiles.com/files/81zmmwvqk

Последний раз редактировалось Kachirus; 28.06.2011 в 21:01.
Kachirus вне форума Ответить с цитированием
Старый 29.06.2011, 08:43   #6
Kachirus
Пользователь
 
Регистрация: 25.06.2011
Сообщений: 12
По умолчанию

исходник нашел, под себя переделал (пока без базы)
Вот проблемка другая появилась..... цифры которые подсвечены цветом в таблице берутся вместе с тегом цвета....
Как это дело исправить?
Вод код.....
Код:
procedure TForm1.Button3Click(Sender: TObject);
var cn,cnrows,cncols, i,j, k:integer; vTags:OleVariant; s:string;
       Node,RowNode, ColNode:TTreeNode; vCols:OleVariant;
begin
      tvTables.Items.Clear;
      vTags:=WebBrowser1.OleObject.Document.getElementsByTagName('Table');
      cn:=vTags.length;

      for i:=0 to cn-1 do
      begin
         s:='';
         if vTags.Item(i).id<>'' then s:=s+' id='+vTags.Item(i).id;
         Node:=tvTables.Items.Add(nil,'Table '+IntToStr(i));
         cnrows:=vTags.Item(i).rows.length;
         for j:=0 to cnrows-1 do
         begin
             RowNode:=tvTables.Items.AddChild(Node,'ñòðîêà '+IntToStr(j));
             vCols:=vTags.Item(i).rows.item(j).getElementsByTagName('TD');
             cncols:=vCols.length;
             for k:=0 to cncols-1 do
             begin
                  ColNode:=tvTables.Items.AddChild(RowNode,'ñòîëáåö '+IntToStr(k));
                  s:=vCols.Item(k).innerHTML;
                  tvTables.Items.AddChild(ColNode,s);
             end;
          end;
       end;
end;
Сидел, разбирался... Выявил закономерность... данный тег <FONT color=#808080>0</FONT> встречается на нулевых значениях...
Попробовал исправить программку, но ничего не выходит.. Что я не так делаю????

Код:
procedure TForm1.Button3Click(Sender: TObject);
var cn,cnrows,cncols, i,j, k:integer; vTags:OleVariant; s:String;
       Node,RowNode, ColNode:TTreeNode; vCols:OleVariant;
begin
      tvTables.Items.Clear;
      vTags:=WebBrowser1.OleObject.Document.getElementsByTagName('Table');
      cn:=vTags.length;

     for i:=0 to cn-1 do
      begin
         s:='';
         if vTags.Item(i).id<>'' then s:=s+' id='+vTags.Item(i).id;
         Node:=tvTables.Items.Add(nil,'Table '+IntToStr(i));
         cnrows:=vTags.Item(i).rows.length;
         for j:=0 to cnrows-1 do
         begin
             RowNode:=tvTables.Items.AddChild(Node,'Строка '+IntToStr(j));
             vCols:=vTags.Item(i).rows.item(j).getElementsByTagName('TD');
             cncols:=vCols.length;
             for k:=0 to cncols-1 do
             begin
                  ColNode:=tvTables.Items.AddChild(RowNode,'Столбец '+IntToStr(k));
                  if vCols.Item(k).innerHTML='<FONT color=#808080>0</FONT>'
                  then
                  begin
                  s:='0';
                  tvTables.Items.AddChild(ColNode,s);
                  end
                  else
s:=vCols.Item(k).innerHTML                  
tvTables.Items.AddChild(ColNode,s);
                  end;
          end;
       end;
end;
Изображения
Тип файла: jpg Безымянный1.jpg (96.4 Кб, 136 просмотров)

Последний раз редактировалось Stilet; 29.06.2011 в 20:30.
Kachirus вне форума Ответить с цитированием
Старый 29.06.2011, 19:07   #7
dacorp
Пользователь
 
Регистрация: 12.06.2010
Сообщений: 48
По умолчанию

Код:
procedure TForm1.Button3Click(Sender: TObject);
var cn,cnrows,cncols, i,j, k:integer; vTags:OleVariant; s:String;
       Node,RowNode, ColNode:TTreeNode; vCols:OleVariant;
begin
      tvTables.Items.Clear;
      vTags:=WebBrowser1.OleObject.Document.getElementsByTagName('Table');
      cn:=vTags.length;

     for i:=0 to cn-1 do
      begin
         s:='';
         if vTags.Item(i).id<>'' then s:=s+' id='+vTags.Item(i).id;
         Node:=tvTables.Items.Add(nil,'Table '+IntToStr(i));
         cnrows:=vTags.Item(i).rows.length;
         for j:=0 to cnrows-1 do
         begin
             RowNode:=tvTables.Items.AddChild(Node,'Строка '+IntToStr(j));
             vCols:=vTags.Item(i).rows.item(j).getElementsByTagName('TD');
             cncols:=vCols.length;
             for k:=0 to cncols-1 do
             begin
                  ColNode:=tvTables.Items.AddChild(RowNode,'Столбец '+IntToStr(k));
                  if vCols.Item(k).innerHTML='<FONT color=#808080>0</FONT>'
                  then s:='0' else s:=vCols.Item(k).innerHTML;                  
                  tvTables.Items.AddChild(ColNode,s);
             end;
          end;
       end;
end;
dacorp вне форума Ответить с цитированием
Старый 29.06.2011, 20:02   #8
Kachirus
Пользователь
 
Регистрация: 25.06.2011
Сообщений: 12
По умолчанию

Тема приостановлена, с парсером разобрался...)))
Kachirus вне форума Ответить с цитированием
Старый 09.08.2011, 15:34   #9
Kachirus
Пользователь
 
Регистрация: 25.06.2011
Сообщений: 12
По умолчанию

доброго времени суток... После продолжительного отсутствия вновь занялся своей программкой....
пока проверял, настраивал, записывал в БД с локальной папки (сохраненная страница) все гуд... Все работает....
Но как только припер на работу исходник, прописал путь к серверу - все начало накрываться медным тазом.
Работать программка та работает, но вот вместе с данными начинает в БД заливать тег </FONT>. Подскажите как исправить.....

Код:
procedure TForm1.Button3Click(Sender: TObject);
var cn,cnrows,cncols,  a, i, j, k :integer; vTags:OleVariant;  s:String;
       Node,RowNode, ColNode:TTreeNode;  vCols:OleVariant;
begin
      tvTables.Items.Clear;
      vTags:=WebBrowser1.OleObject.Document.getElementsByTagName('Table');
      cn:=vTags.length;

      //нужно перебрать все строки и столбцы таблицы
      for i:=0 to cn-1 do
      begin
         s:='';
         if vTags.Item(i).id<>'' then s:=s+' id='+vTags.Item(i).id;
         cnrows:=vTags.Item(i).rows.length;
         for j:=1 to cnrows-1 do
         begin
             Table1.Append;
             Table1.FieldByName('Data').AsDateTime:=DateTimePicker3.Date;
             RowNode:=tvTables.Items.AddChild(Node,'строка '+IntToStr(j));
             vCols:=vTags.Item(i).rows.item(j).getElementsByTagName('TD');
             cncols:=vCols.length;
             for k:=1 to cncols-1 do
             begin
                  ColNode:=tvTables.Items.AddChild(RowNode,'столбец '+IntToStr(k));
                  if vCols.Item(k).innerHTML='<FONT color=#808080>0</FONT>'
                  then s:='0'
                  else s:=vCols.Item(k).innerHTML;
                  tvTables.Items.AddChild(ColNode,s);
                  if k<21 then Table1.Fields[k].Value:=s;
             end;
          end;
        end;
Kachirus вне форума Ответить с цитированием
Старый 09.08.2011, 21:13   #10
Kachirus
Пользователь
 
Регистрация: 25.06.2011
Сообщений: 12
По умолчанию

Посидел, порылся нашел что-то но не совсем корректно работает....
Раньше без удаления получал результат например такой: 12345</FONT>
После применения удаления результат такой: 12345>
Подскажите как избавиться от скобки в конце????

Код:
procedure TForm1.Button3Click(Sender: TObject);
var cn,cnrows,cncols,  a, i, j, k :integer; vTags:OleVariant;  str, str1, s:String;
       Node,RowNode, ColNode:TTreeNode;  vCols:OleVariant;
begin
      tvTables.Items.Clear;
      vTags:=WebBrowser1.OleObject.Document.getElementsByTagName('Table');
      cn:=vTags.length;

      for i:=0 to cn-1 do
      begin
         s:='';
         if vTags.Item(i).id<>'' then s:=s+' id='+vTags.Item(i).id;
         cnrows:=vTags.Item(i).rows.length;
         for j:=1 to cnrows-1 do
         begin
             Table1.Append;
             Table1.FieldByName('Data').AsDateTime:=DateTimePicker3.Date;
             RowNode:=tvTables.Items.AddChild(Node,'ñòðîêà '+IntToStr(j));
             vCols:=vTags.Item(i).rows.item(j).getElementsByTagName('TD');
             cncols:=vCols.length;
             for k:=1 to cncols-1 do
             begin
                  ColNode:=tvTables.Items.AddChild(RowNode,'ñòîëáåö '+IntToStr(k));
                  if vCols.Item(k).innerHTML='<FONT color=#808080>0</FONT>'
                  then s:='0'
                  else s:=vCols.Item(k).innerHTML;
                  str1:=s;
                  if pos('>',str1)<>0 then
                    begin
                    Delete(str1, pos('<',str1),Length(str1)-pos('<',str1));
                    end;
                    s:=str1;
                  tvTables.Items.AddChild(ColNode,s);
                  if k<21 then Table1.Fields[k].Value:=s;
             end;
          end;
       end;
end;
Kachirus вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Заполнение таблицы данными Ташка Microsoft Office Excel 1 13.05.2011 11:23
Заполнение таблицы данными по условию JVG Microsoft Office Excel 2 23.03.2011 18:13
заполнение таблицы данными smira Microsoft Office Excel 9 31.01.2011 11:21
вывод таблицы с данными функции gessi Фриланс 5 16.09.2009 17:06
Заполнение одной таблицы данными из другой melok_s Microsoft Office Excel 7 20.11.2008 03:56