Что нового

Отбор информации одного массива, в другие

jufas222

Знающий
Сообщения
93
Репутация
5
Есть код
Код:
$sText=BinaryToString(InetRead('http://l2.overworld.su/index/statistics/fortress/1/',1))
$a1=StringRegExp($sText,'(?s)<td class="right"><strong>(.*?)</strong>
',3)
$a2=StringRegExp($sText,'(?s)Владелец: <b>(.*?)</b>',3)
$a3=StringRegExp($sText,'(?s)Владеет с: (.*?) 
',3)
$a4=StringRegExp($sText,'(?s)Последняя осада: (.*?)</tr>',3)
GUICreate('test',700,200)
$Edit=GUICtrlCreateEdit('',5,5,600,200)
For $i=0 To UBound($a1)-1
    GUICtrlSetData($Edit,$a1[$i]&' | '&$a2[$i]&' | '&$a3[$i]&' | '&$a4[$i]&@CRLF,1)
Next

GUISetState()
Sleep(4000)

В нем считывается статистика с сервера о осадах и выводится в гуи, проблема в том, что осаждаемых фортов 21.
как сделать так, что бы каждый форт, имел свой массив, то есть сейчас под $a1 хранятся все названия фортов, под $a2 все владельцы, под $a3 с какого времени владеют, под $a4 последняя осада.
Возможно ли сделать так что бы у $a1 было название одного форта, под $a2 владелец форта $a1, под $a3 с какого времени владеет $a1, и так далее.
От сюда считывается информация http://l2.overworld.su/index/statistics/fortress/1/
 

DarWiM

Продвинутый
Сообщения
527
Репутация
90
jufas222
Код:
#include <array.au3>
$sText=BinaryToString(InetRead('http://l2.overworld.su/index/statistics/fortress/1/',1))
;~ ConsoleWrite($sText&@CRLF)
$a1=StringRegExp($sText,'(?s)<td class="right"><strong>(.*?)</strong>
',3)
$a2=StringRegExp($sText,'(?s)Владелец: <b>(.*?)</b>',3)
$a3=StringRegExp($sText,'(?s)Владеет с: (.*?) 
',3)
$a4=StringRegExp($sText,'(?s)Последняя осада: (.*?)\s+?</tr>',3)
;~ _ArrayDisplay($a1)
;~ _ArrayDisplay($a2)
;~ _ArrayDisplay($a3)
;~ _ArrayDisplay($a4)
GUICreate('test',700,200)
$Edit=GUICtrlCreateEdit('',5,5,690,190)
For $i=0 To UBound($a1)-1
    GUICtrlSetData($Edit,$a1[$i]&' | '&$a2[$i]&' | '&$a3[$i]&' | '&$a4[$i]&@CRLF,1)
Next
GUISetState()

Dim $Array[UBound($a1)][4]
For $i=0 To UBound($Array)-1
	$Array[$i][0]=$a1[$i]
	$Array[$i][1]=$a2[$i]
	$Array[$i][2]=$a3[$i]
	$Array[$i][3]=$a4[$i]
Next
_ArrayDisplay($Array)
Sleep(5000)
 
Автор
J

jufas222

Знающий
Сообщения
93
Репутация
5
Но ведь это одно и тоже, только сперва вводятся данные в GUI, а потом уже видны на ListView Display, повторюсь мне нужно получить данные от каждого форта, что бы потом отправить их в GUI предварительно вычислив сколько осталось до регистрации, но это уже совсем другое, а вы мне помогли считать всю информацию и отправить в GUI, но как оттуда взять именно тот который нужен форт (информацию о форте) я не понимаю...

Вот есть скриншот подобной программы, она написана на дельфи http://s019.radikal.ru/i609/1209/ad/08642f2e939b.jpg
 
Автор
J

jufas222

Знающий
Сообщения
93
Репутация
5
Регистрация проходит после 4 часов, после осады, то есть, если кто то зарегистрировался, идёт отсчёт одного часа, после прохождения часа начинается осада, осада идет один час, после окончания зарегистрироваться можно только спустя 4 часа и более.
Мне не нужно сейчас вычитание времени, меня интересует как взять все форты под разными массивами, а не 1 со всеми, нужно поделить на части, форты, массивы, но я не малейшего понятия не имею как это осуществить...
 

DarWiM

Продвинутый
Сообщения
527
Репутация
90
jufas222
Объясню. В последнем примере у каждой башни есть своя строка, которая разделена на 4 колонки.
В первой колонке название башни, во второй владелец, в третьей "Владеет с.." и в последней время последней осады.
Как и что вы собираетесь считать я не знаю, но лично я считаю вполне удобным такую структуру массива.

На всякий случай говорю, что индексы в массиве таковы:
- [$i][0] название
- [$i][1] владелец
- [$i][2] владеет с
- [$i][3] последняя осада

Вы вычисляйте, а я потом помогу с GUI, если нужно будет..
 
Автор
J

jufas222

Знающий
Сообщения
93
Репутация
5
Вы мне предлагаете оформить это, примерно так
Код:
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <array.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 650, 438, 192, 124)
$Input1 = GUICtrlCreateEdit("", 8, 50, 140, 320)
GUICtrlSetState(-1, $GUI_DISABLE)
$Input2 = GUICtrlCreateEdit("", 150, 50, 140, 320)
GUICtrlSetState(-1, $GUI_DISABLE)
$Input3 = GUICtrlCreateEdit("", 300, 50, 140, 320)
GUICtrlSetState(-1, $GUI_DISABLE)
$Input4 = GUICtrlCreateEdit("", 446, 50, 140, 320)
GUICtrlSetState(-1, $GUI_DISABLE)
$Label1 = GUICtrlCreateLabel("Форт",65, 24, 36, 17)
$Label2 = GUICtrlCreateLabel("Владелец",180, 24, 50, 17)
$Label3 = GUICtrlCreateLabel("Владеет с",340, 24, 55, 17)
$Label4 = GUICtrlCreateLabel("Время последней осады",450, 24, 125, 17)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###


$sText=BinaryToString(InetRead('http://l2.overworld.su/index/statistics/fortress/1/',1))
$a1=StringRegExp($sText,'(?s)<td class="right"><strong>(.*?)</strong>
',3)
$a2=StringRegExp($sText,'(?s)Владелец: <b>(.*?)</b>',3)
$a3=StringRegExp($sText,'(?s)Владеет с: (.*?) 
',3)
$a4=StringRegExp($sText,'(?s)Последняя осада: (.*?)\s+?</tr>',3)

For $i=0 To UBound($a1)-1
    GUICtrlSetData($Input1,$a1[$i]&@CRLF,1)
Next
For $q=0 To UBound($a2)-1
    GUICtrlSetData($Input2,$a2[$q]&@CRLF,1)
Next
For $a=0 To UBound($a3)-1
    GUICtrlSetData($Input3,$a3[$a]&@CRLF,1)
Next
For $b=0 To UBound($a4)-1
    GUICtrlSetData($Input4,$a4[$b]&@CRLF,1)
Next
;GUISetState()
While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit

	EndSwitch
WEnd


DarWiM [?]
Вы вычисляйте, а я потом помогу с GUI, если нужно будет..

Большое спасибо за отзывчевость :smile:
 

DarWiM

Продвинутый
Сообщения
527
Репутация
90
Скорее так:
Код:
#include <GUIConstantsEx.au3>
GUICreate("test", 650, 400)
$list=GUICtrlCreateListView('Форт                                   |Владелец              |Владеет с   |Время последней осады',10,10,630,380)
GUISetState(@SW_SHOW)

$sText=BinaryToString(InetRead('http://l2.overworld.su/index/statistics/fortress/1/',1))
$a1=StringRegExp($sText,'(?s)<td class="right"><strong>(.*?)</strong>
',3)
$a2=StringRegExp($sText,'(?s)Владелец: <b>(.*?)</b>',3)
$a3=StringRegExp($sText,'(?s)Владеет с: (.*?) 
',3)
$a4=StringRegExp($sText,'(?s)Последняя осада: (.*?)\s+?</tr>',3)

For $i=0 To UBound($a1)-1
	GUICtrlCreateListViewItem($a1[$i]&'|'&$a2[$i]&'|'&$a3[$i]&'|'&$a4[$i],$list)
Next
While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd
 
Верх