Что нового

[Данные, строки] Парсинг HTML таблицы, первые 2-е строки

aleksandrovich

Новичок
Сообщения
7
Репутация
1
Здравствуйте, есть таблица
Код:
<table cellspacing="0" cellpadding="5">
	<tr>
		<td class="tsrsbsls"><b>Дата начала транзакции</b></td>
		<td class="tsrsbsls"><b>N транзакции</b></td>
		<td class="tsrsbsls"><b>Сумма транзакции</b></td>
		<td class="tsrsbsls"><b>Сумма перевода</b></td>
		<td class="tsrsbsls"><b>WM-кошелёк</b></td>
		<td class="tsrsbsls"><b>Статус</b></td>
	</tr>
	<tr>
		<td class="tsrsbsls" align="center">01.01.2012 20:00</td>
		<td class="tsrsbsls" align="center">57277</td>
		<td class="tsrsbsls" align="right">100500.00</td>
		<td class="tsrsbsls" align="right">100500.00</td>
		<td class="tsrsbsls" align="center">R0123456789</td>
		<td class="tsrsbsls" align="center">перевод отменён</td>
	</tr>

..далее ещё 100 строк таблицы..
1 строка - это заголовок, он мне не нужен
интересует вторая строка, последняя ячейка таблицы (текст в ней может быть разный), как её выдрать?
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
aleksandrovich

Если веб-страница в виде файла, то такой код вроде должен получить массив ячеек:
Код:
#include <Array.au3>
$sText=FileRead('D:\test.html') 
$avArray=StringRegExp($sText, '>(.*?[^</b>])</td>', 3)
_ArrayDisplay($avArray)
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
aleksandrovich
Тогда
Код:
#include <IE.au3>
$oIE = _IECreate($Url)
$sText=_IEDocReadHTML ($oIE)
$avArray=StringRegExp($sText, '>(.*?[^</b>])</td>', 3)
_ArrayDisplay($avArray)


Или еще есть функция
Код:
InetRead()
, скачка страниц без браузера - работает гораздо быстрее, но у меня лично русский текст отображает неправильно.
 
Автор
A

aleksandrovich

Новичок
Сообщения
7
Репутация
1
пардон, тогда немного проще задача
так же интересует только 2-ая строка последняя ячейка, но только если в ней текст "перевод выполнен" - вывести например msgbox, но не обращать внимания на строки и ячейки ниже, в них так же может присутствовать этот текст.
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
aleksandrovich [?]
если в ней текст "перевод выполнен" - вывести например msgbox
Так ? :
Код:
$sText = "<tr>"  & @CRLF & _ 
"      <td class='tsrsbsls'><b>Дата начала транзакции</b></td>"  & @CRLF & _ 
"      <td class='tsrsbsls'><b>N транзакции</b></td>"  & @CRLF & _ 
"      <td class='tsrsbsls'><b>Сумма транзакции</b></td>"  & @CRLF & _ 
"      <td class='tsrsbsls'><b>Сумма перевода</b></td>"  & @CRLF & _ 
"      <td class='tsrsbsls'><b>WM-кошелёк</b></td>"  & @CRLF & _ 
"      <td class='tsrsbsls'><b>Статус</b></td>"  & @CRLF & _ 
"   </tr>"  & @CRLF & _ 
"   <tr>"  & @CRLF & _ 
"      <td class='tsrsbsls' align='center'>01.01.2012 20:00</td>"  & @CRLF & _ 
"      <td class='tsrsbsls' align='center'>57277</td>"  & @CRLF & _ 
"      <td class='tsrsbsls' align='right'>100500.00</td>"  & @CRLF & _ 
"      <td class='tsrsbsls' align='right'>100500.00</td>"  & @CRLF & _ 
"      <td class='tsrsbsls' align='center'>R0123456789</td>"  & @CRLF & _ 
"      <td class='tsrsbsls' align='center'>перевод отменён</td>"  & @CRLF & _ 
"   </tr>"

$sPatern = "(?s)<tr>.*?</tr>.*?>(перевод отменён)</td>\r\n\s*</tr>"
$iResult = StringRegExp( $sText, $sPatern )
MsgBox(4096, 'перевод отменён', $iResult)

$sPatern = "(?s)<tr>.*?</tr>.*?>(перевод выполнен)</td>\r\n\s*</tr>"
$iResult = StringRegExp( $sText, $sPatern )
MsgBox(4096, ' перевод выполнен', $iResult)
 
Автор
A

aleksandrovich

Новичок
Сообщения
7
Репутация
1
gregaz
я правильно понимаю код?
Код:
; Ищем в тексте на странице следующий хтмл-код
; 1-ая строка таблицы
$sText = "<tr>"  & @CRLF & _
"      <td class='tsrsbsls'><b>Дата начала транзакции</b></td>"  & @CRLF & _
"      <td class='tsrsbsls'><b>N транзакции</b></td>"  & @CRLF & _
"      <td class='tsrsbsls'><b>Сумма транзакции</b></td>"  & @CRLF & _
"      <td class='tsrsbsls'><b>Сумма перевода</b></td>"  & @CRLF & _
"      <td class='tsrsbsls'><b>WM-кошелёк</b></td>"  & @CRLF & _
"      <td class='tsrsbsls'><b>Статус</b></td>"  & @CRLF & _
"   </tr>"  & @CRLF & _
; 2-ая строка таблицы
"   <tr>"  & @CRLF & _
"      <td class='tsrsbsls' align='center'>01.01.2012 20:00</td>"  & @CRLF & _
"      <td class='tsrsbsls' align='center'>57277</td>"  & @CRLF & _
"      <td class='tsrsbsls' align='right'>100500.00</td>"  & @CRLF & _
"      <td class='tsrsbsls' align='right'>100500.00</td>"  & @CRLF & _
"      <td class='tsrsbsls' align='center'>R0123456789</td>"  & @CRLF & _
"      <td class='tsrsbsls' align='center'>перевод отменён</td>"  & @CRLF & _
"   </tr>"
; если текст последней ячейки "перевод отменён"  - выводим msgbox
$sPatern = "(?s)<tr>.*?</tr>.*?>(перевод отменён)</td>\r\n\s*</tr>"
$iResult = StringRegExp( $sText, $sPatern )
MsgBox(4096, 'перевод отменён', $iResult)

; если текст последней ячейки "перевод выполнен"  - выводим msgbox
$sPatern = "(?s)<tr>.*?</tr>.*?>(перевод выполнен)</td>\r\n\s*</tr>"
$iResult = StringRegExp( $sText, $sPatern )
MsgBox(4096, ' перевод выполнен', $iResult)

но, вторая строка (дата,N,сумма,WM) таблицы всегда разная
мб тогда можно выдрать всю 2-ю строку из таблицы, опуская при этом все последующие строки? с условием что текст последней ячейки = "перевод выполнен", если условие не выполняется, то ничего не делать :-\
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
aleksandrovich [?]
я правильно понимаю код?
Не совсем. Здесь 2 варианта.ставишь нужный
aleksandrovich [?]
но, вторая строка (дата,N,сумма,WM) таблицы всегда разная
Для рег.выражения это "до фонаря"
Оно ищет во 2-й строке наличие последнего элемента : "перевод выполнен"
Если он найден, то $iResult=1

мб тогда можно выдрать всю 2-ю строку из таблицы, опуская при этом все последующие строки? с условием что текст последней ячейки = "перевод выполнен", если условие не выполняется, то ничего не делат

Вот:
Код:
#include<Array.au3>
$sText=ClipGet()
$sPatern = "(?s)^.*<tr>.*?</tr>\r?\n?\s*(<tr>.*?>перевод отменён</td>\r?\n?\s*</tr>).*$"    ;или  перевод выполнен
$sResult = StringRegExpReplace( $sText, $sPatern, '\1' )
If @extended<>0 Then
    MsgBox(4096, 'Код 2-й строки', $sResult)
    $sPatern = ">(.*?)</td>"
    $aResult = StringRegExp( $sResult, $sPatern, 3 )
    _ArrayDisplay($aResult)
Else
    MsgBox(4096,"",  'Фрагмент отутствует')
EndIf





Добавлено:
Сообщение автоматически объединено:

Если задание - выявить наличие во 2-й строке текста: "перевод выполнен" , то
то достаточно прдыдущегого варианта.
Если же тебе нужнен текст всей 2-й строки , то используешь последний вариант (текст в массиве)
 
Автор
A

aleksandrovich

Новичок
Сообщения
7
Репутация
1
вроде разобрался :laugh:

Код:
$oTable = _IETableGetCollection ($oIE, 13) ; 13 таблица на странице)
	  $aTableData = _IETableWriteToArray ($oTable)
;~ 	  _ArrayDisplay($aTableData, "Class List of Active Window")
	  If StringInStr($aTableData[5][1], "выполнен") Then ; проверяем нужную 5-ую ячейку, 1-ой строки (счисление идет с 0)
		 MsgBox(0, "заголовок", "перевод выполнен")
	  EndIf
	  
	  If StringInStr($aTableData[5][1], "в обработке") Then
		 MsgBox(0, "заголовок", "перевод в обработке")
	  EndIf
	  
	  If StringInStr($aTableData[5][1], "отменён") Then
		 MsgBox(0, "заголовок", "перевод отменён")
	  EndIf
 
Верх