Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Обработка многострочного HTML кода с одинаковыми строчками. (http://forum.oszone.net/showthread.php?t=158415)

FlatX007 27-11-2009 16:53 1281388

Обработка многострочного HTML кода с одинаковыми строчками.
 
Нужно вытащить из HTML кода строчки выделенные красным, заготовки нет вообще потому, что всё остановилось на этом :) $sREAD_HTML = _INetGetSource('http://cstrike.***.net/monitoring/') - дальше StringRegExp после него пустой массив или вообще ничего :(
Сложность заключается в том, что темеже самыми тегами прописана статистика для других серверов их много.

Код:

        <td>
          <img alt='' src='http://cstrike.****.net/monitoring/lgsl_files/other/icon_online.gif' title='ONLINE' />
        </td>

        <td title='GAME LINK' style='text-align:right'>
          192.168.0.101:27020
        </td>

        <td title='TritiumNet Left 4 Dead' style='text-align:left'>
            <a href='http://cstrike.****.net/monitoring/lgsl_files/../?s=4'><div style='width:100%; overflow:hidden; height:1.3em'>
          TritiumNet Left 4 Dead - <!----> Эта строчка не меняется !!
          </div>
                  </a>
        </td>

        <td style='white-space:nowrap; text-align:left'>
          l4d_hospital01_apartment
        </td>

        <td style='white-space:nowrap; text-align:right'>
          0 / 10
        </td>

У меня вообще никаких мыслей по этому поводу. Хотябы вытащить карту и колличество игроков (последняя и пред последняя строчки выделенные красным)

Creat0R 27-11-2009 18:31 1281456

Код:

#include <Array.au3>

$sREAD_HTML = ClipGet() ;Это вместо _INetGetSource

$sPattern1 = "<td title='GAME LINK' style='text-align:right'>\s+(.*?)\s+</td>"
$sPattern2 = _
    "<td title='TritiumNet Left 4 Dead' style='text-align:left'>\s+<a href='.*'>" & _
    "<div style='width:100%; overflow:hidden; height:1.3em'>\s+(.*?)\s+</div>"
$sPattern3 = "<td style='white-space:nowrap; text-align:left'>\s+(.*?)\s+</td>"
$sPattern4 = "<td style='white-space:nowrap; text-align:right'>\s+(.*?)\s+</td>"

$aRet = StringRegExp($sREAD_HTML, '(?s)' & $sPattern1 & '.*' & $sPattern2 & '.*' & $sPattern3 & '.*' & $sPattern4, 3)

_ArrayDisplay($aRet)


FlatX007 27-11-2009 19:14 1281479

Вложений: 1
спасибо конечно ... но вот что там ... я сам не разберусь :(

Creat0R 30-11-2009 21:56 1283753

Цитата:

вот что там
Там то, что попадает под критерий шаблона. Я проверял на том тексте что в первом сообщений, с ним всё отлично работает (в массив попадают именно строки выделенные красным цветом).

FlatX007 01-12-2009 16:15 1284263

Цитата:

Цитата FlatX007
Сложность заключается в том, что темеже самыми тегами прописана статистика для других серверов их много. »

Строки то попадают =), только с других серверов ....на этой странице прописана ещё статистика для пяти серверов.
Посмотри ПМ ;)

Проблема решилась во так:
Код:

#include <Array.au3>
#include <File.au3>
#include <INet.au3>

Dim $aReadHTML
Global $ifForStringSearch = False, $sNewFileHTML

$sURL_LINK
= 'http://cstrike.*****.net/monitoring/'

$sTEMP_FILE = _TempFile()
$sTEMP_FILE2 = _TempFile()

$sREAD_HTML = _INetGetSource($sURL_LINK)
    If Not (@error) Then
        FileWrite($sTEMP_FILE, $sREAD_HTML)
        _FileReadToArray($sTEMP_FILE, $aReadHTML)
        For $i = 0 To UBound($aReadHTML) - 1
            $sForString = StringInStr( StringStripWS($aReadHTML[$i], 1), "192.168.0.101:27020")
            If $sForString = 1 Then
                $ifForStringSearch = $i
                ExitLoop
            EndIf
        Next

        If Not
$ifForStringSearch = False Then
            For
$i = $ifForStringSearch To $ifForStringSearch + 20
                $sNewFileHTML &= $aReadHTML[$i] & @CRLF
            Next
        EndIf


        FileWrite($sTEMP_FILE2, $sNewFileHTML)

        $sPattern3 = "<td style='white-space:nowrap; text-align:left'>\s+(.*?)\s+</td>"
        $sPattern4 = "<td style='white-space:nowrap; text-align:right'>\s+(.*?)\s+</td>"
        $aRet = StringRegExp(FileRead($sTEMP_FILE2), '(?s)' & $sPattern3 & '.*' & $sPattern4, 3)
        _ArrayDisplay($aRet)
    EndIf

FileDelete($sTEMP_FILE)
FileDelete($sTEMP_FILE2)


Creat0R 01-12-2009 17:47 1284350

Цитата:

Цитата FlatX007
Проблема решилась во так »

Отлично, я вот только не понял для чего нужны временные файлы? :dont-know

FlatX007 01-12-2009 23:42 1284666

По другому не получилось ... у меня. Я думаю если исправить то на работоспособность это не повлияет.

Creat0R 02-12-2009 09:50 1284850

Цитата:

Цитата FlatX007
По другому не получилось »

Код:

#include <Array.au3>
#include <File.au3>
#include <INet.au3>

Dim $aReadHTML
Global $ifForStringSearch = False, $sNewFileHTML

$sURL_LINK
= 'http://cstrike.*****.net/monitoring/'

$sREAD_HTML = _INetGetSource($sURL_LINK)

If Not @error Then
    $aReadHTML = StringSplit(StringStripCR($sREAD_HTML), @LF)

    For $i = 1 To UBound($aReadHTML) - 1
        $sForString = StringInStr(StringStripWS($aReadHTML[$i], 1), "192.168.0.101:27020")

        If $sForString = 1 Then
            $ifForStringSearch = $i
            ExitLoop
        EndIf
    Next

    If Not $ifForStringSearch = False Then
        For $i = $ifForStringSearch To $ifForStringSearch + 20
            $sNewFileHTML &= $aReadHTML[$i] & @CRLF
        Next
    EndIf

    $sPattern3 = "<td style='white-space:nowrap; text-align:left'>\s+(.*?)\s+</td>"
    $sPattern4 = "<td style='white-space:nowrap; text-align:right'>\s+(.*?)\s+</td>"
    $aRet = StringRegExp($sNewFileHTML, '(?s)' & $sPattern3 & '.*' & $sPattern4, 3)

    _ArrayDisplay($aRet)
EndIf



Время: 21:37.

Время: 21:37.
© OSzone.net 2001-