Что нового

[Массивы] строки тхт файла считать в массив и отобразить GUICtrlListView

boomerang69

Новичок
Сообщения
3
Репутация
0
Здравствуйте гуру!
Имеется txt файл
История очков для NICKNAME123 (played 17 of 52 tournaments)
Дата
Участники
Место
Начало
Scored
Конец
2017-11-11 05:15 (MSK)
295
101
28.59
0
28.59
2017-11-11 01:15 (MSK)
485
284
28.59
0
28.59
2017-11-09 21:15 (MSK)
904
759
28.59
0
28.59
2017-11-08 21:15 (MSK)
940
115
0
28.59
28.59
2017-11-08 05:15 (MSK)
313
253
0
0
0
2017-11-08 01:15 (MSK)
481
418
0
0
0
2017-11-07 21:15 (MSK)
929
751
0
0
0
2017-11-07 01:15 (MSK)
484
414
0
0
0
2017-11-06 21:15 (MSK)
923
296
0
0
0
2017-11-06 17:15 (MSK)
786
648
0
0
0
2017-11-06 13:15 (MSK)
615
455
0
0
0
2017-11-06 09:15 (MSK)
443
366
0
0
0
2017-11-06 05:15 (MSK)
266
232
0
0
0
2017-11-06 01:15 (MSK)
472
396
0
0
0
2017-11-05 21:15 (MSK)
909
778
0
0
0
2017-11-05 17:15 (MSK)
808
308
0
0
0
2017-11-05 13:15 (MSK)
616
517
0
0
0
UNIVERSITY 11
Нужно получить таблицу с шестью колонками - "Дата|Участники|Место|Начало|Scored|Конец" и сответственно данные в строках в этих колонках.
Количество строк в файле может менятсья.

У меня получилось заполнить только первую колонку "Дата", а дальше не получается
код:
Код:
#include <GUIConstantsEx.au3>
 #include <ListviewConstants.au3>
 ; #Include <Array.au3>
#include <File.au3>
 Opt("GUIOnEventMode", 1)

MainGUI()

 ; ----- GUIs
Func MainGUI()
  Global $listview
  $listGUI = GUICreate("AutoIt GUICtrlCreateListView Example", 400, 400, 100, 200, -1)
  GUISetOnEvent($GUI_EVENT_CLOSE, "OnClose")
  $listview = GUICtrlCreateListView("Дата|Участники|Место|Начало|Scored|Конец", 10, 10,400, 400, $LVS_NOSORTHEADER,$LVS_EX_GRIDLINES)

Local $aRecords

;заполняем колонку 1
If Not _FileReadToArray("1.txt", $aRecords) Then
    MsgBox(4096, "Ошибка", " Ошибка чтения файла в массив     Ошибка = " & @error)
    Exit
EndIf
For $i > 9 To $aRecords[0]

$item1=GUICtrlCreateListViewItem($aRecords[$i]&"| | | | |", $ListView)

;$i=$i+5

Next

  GUISetState()

  While 1

    Sleep(10)
  WEnd
EndFunc

Func OnClose()
   Exit
EndFunc

Направьте на путь истинный!
 

pvnn

Осваивающий
Сообщения
305
Репутация
32
Вообще вариантов множество, например можно так:
Код:
#include <File.au3>
#include <Array.au3>

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
#include <GuiListView.au3>


$FilePath=@ScriptDir&'\1.txt'
$aFile=FileReadToArray($FilePath) ; Читает указанный файл построчно в массив.
;_ArrayDisplay($aFile)

; Заголовки
Local $Headers
For $i=1 To UBound($aFile)-1
	If StringInStr($aFile[$i],'msk') Then ExitLoop
	$Headers&=$aFile[$i]&'|'
Next

; GUI
$Form1 = GUICreate($aFile[0], 606, 391, 192, 114)
$hListView = GUICtrlCreateListView($Headers, 8, 8, 586, 294,$LVS_NOSORTHEADER,$LVS_EX_GRIDLINES)
Fill_ListView($aFile,$hListView) ; Заполнить ListView
$Button1 = GUICtrlCreateButton("ОК", 221, 335, 75, 25)
$Button2 = GUICtrlCreateButton("Отмена", 309, 335, 75, 25)
GUISetState(@SW_SHOW)

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit

	EndSwitch
WEnd

; Заполнить ListView
Func Fill_ListView($aFile,$hListView)
	Local $FlagStart=0,$IndSubItem=0,$Index
	For $i=1 To UBound($aFile)-1
		If StringInStr($aFile[$i],'msk') Then
			$Index=_GUICtrlListView_AddItem($hListView,$aFile[$i]) ; Добавить пункт в ListView
			$FlagStart=1
			$IndSubItem=0
			ContinueLoop
		EndIf
		If $FlagStart=1 Then ; Добавить подпункт в ListView
			$IndSubItem+=1
			_GUICtrlListView_AddSubItem($hListView, $Index, $aFile[$i], $IndSubItem)  ; Добавить подпункт
		EndIf
	Next
EndFunc
 
Автор
B

boomerang69

Новичок
Сообщения
3
Репутация
0
Премного благодарен!

Вообще изначально вместо txt файла была html таблица
Код:
<div id="leagueRefreshHistory_2" data-league-id="2" data-user-id="3633671">
        <i class="b-title b-title_light">
            <a title="" href="#">История очков для NICKNAME (played 12 of 52 tournaments)</a>
        </i>
        <table class="b-table b-table_league">
            <thead>
                <tr>
                                        <td><a href="/articles/?id=9375" title="Дата">Дата</a></td>
                    <td><a href="/articles/?id=9375" title="Участники">Участники</a></td>
                    <td><a href="/articles/?id=9375" title="Место">Место</a></td>
                    <td><a href="/articles/?id=9375" title="Начало">Начало</a></td>
                    <td><a href="/articles/?id=9375" title="Scored">Scored</a></td>
                    <td><a href="/articles/?id=9375" title="Конец">Конец</a></td>
                </tr>
            </thead>
            <tbody>
                                                            <tr class="odd">
                            <td>2017-11-08 01:15 (MSK)</td>
                            <td>481</td>
                            <td>418</td>
                            <td>0</td>
                            <td>0</td>
                            <td>0</td>
                        </tr>
                                            <tr class="">
                            <td>2017-11-07 21:15 (MSK)</td>
                            <td>929</td>
                            <td>751</td>
                            <td>0</td>
                            <td>0</td>
                            <td>0</td>
                        </tr>
                                            <tr class="odd">
                            <td>2017-11-07 01:15 (MSK)</td>
                            <td>484</td>
                            <td>414</td>
                            <td>0</td>
                            <td>0</td>
                            <td>0</td>
                        </tr>
                                            <tr class="">
                            <td>2017-11-06 21:15 (MSK)</td>
                            <td>923</td>
                            <td>296</td>
                            <td>0</td>
                            <td>0</td>
                            <td>0</td>
                        </tr>
                                            <tr class="odd">
                            <td>2017-11-06 17:15 (MSK)</td>
                            <td>786</td>
                            <td>648</td>
                            <td>0</td>
                            <td>0</td>
                            <td>0</td>
                        </tr>
                                            <tr class="">
                            <td>2017-11-06 13:15 (MSK)</td>
                            <td>615</td>
                            <td>455</td>
                            <td>0</td>
                            <td>0</td>
                            <td>0</td>
                        </tr>
                                            <tr class="odd">
                            <td>2017-11-06 09:15 (MSK)</td>
                            <td>443</td>
                            <td>366</td>
                            <td>0</td>
                            <td>0</td>
                            <td>0</td>
                        </tr>
                                            <tr class="">
                            <td>2017-11-06 05:15 (MSK)</td>
                            <td>266</td>
                            <td>232</td>
                            <td>0</td>
                            <td>0</td>
                            <td>0</td>
                        </tr>
                                            <tr class="odd">
                            <td>2017-11-06 01:15 (MSK)</td>
                            <td>472</td>
                            <td>396</td>
                            <td>0</td>
                            <td>0</td>
                            <td>0</td>
                        </tr>
                                            <tr class="">
                            <td>2017-11-05 21:15 (MSK)</td>
                            <td>909</td>
                            <td>778</td>
                            <td>0</td>
                            <td>0</td>
                            <td>0</td>
                        </tr>
                                            <tr class="odd">
                            <td>2017-11-05 17:15 (MSK)</td>
                            <td>808</td>
                            <td>308</td>
                            <td>0</td>
                            <td>0</td>
                            <td>0</td>
                        </tr>
                                            <tr class="">
                            <td>2017-11-05 13:15 (MSK)</td>
                            <td>616</td>
                            <td>517</td>
                            <td>0</td>
                            <td>0</td>
                            <td>0</td>
                        </tr>
                                                </tbody>
        </table>
        
    
    </div>

UNIVERSITY 11
С этим кодом получилось отобразить в _ArrayDisplay
Код:
#Include <Array.au3>
$shtml = FileRead('1.htm')

$aRes = StringRegExp($sHtml, "(?isU)(?|<(/)tr>\s*|<t[dh].*>(.*)</t[dh]>)", 3)

Local $aResult[ UBound($aRes) ] [ UBound($aRes) ]
Local $iRow = 1, $iCol = 0, $iMaxRow = 0

For $i = 0 To UBound($aRes) - 1
    If $aRes[$i] = "/" Then
        $iRow += 1
        $iCol = 0
    Else
        $aResult[$iRow][$iCol] = $aRes[$i]
        $iCol += 1
        If $iCol > $iMaxRow Then $iMaxRow = $iCol
    EndIf
Next

Redim $aResult[$iRow][$iMaxRow]

_ArrayDisplay($aResult)


Попробую это загнать в listview, и кстати мне достаточно первые три колонки.
Если не получится, придется просить вашей помощи. Еще раз спасибо!
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
boomerang69
Попробовал с вашим регулярным выражением и htm что вы выложили

Код:
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
Opt("GUIOnEventMode", 1)

Global $hGUI, $iListView, $sPath = @ScriptDir & "\1.htm", $aRecords

$aRecords = StringRegExp(FileRead($sPath), "(?isU)(?|<(/)tr>\s*|<t[dh].*>(.*)</t[dh]>)", 3)

$hGUI = GUICreate("Example", 500, 500)
GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
$iListView = GUICtrlCreateListView("Дата|Участники|Место|Начало|Scored|Конец", 5, 5, 490, 490, $LVS_NOSORTHEADER)
GUICtrlSendMsg($iListView, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_GRIDLINES, $LVS_EX_GRIDLINES)

For $i = 7 To UBound($aRecords) - 2 Step 7
	GUICtrlCreateListViewItem($aRecords[$i] & "|" & $aRecords[$i + 1] & "|" & $aRecords[$i + 2] & "|" & $aRecords[$i + 3] & _
			"|" & $aRecords[$i + 4] &  "|" & $aRecords[$i + 5], $iListView)
Next
For $i = 0 To 5
	GUICtrlSendMsg($iListView, $LVM_SETCOLUMNWIDTH, $i, $LVSCW_AUTOSIZE_USEHEADER)
Next

GUISetState()

While 1
	Sleep(10)
WEnd

Func _Exit()
	Exit
EndFunc
 
Автор
B

boomerang69

Новичок
Сообщения
3
Репутация
0
Re: строки тхт файла считать в массив и отобразить GUICtrlListView

:laugh: :laugh:
Спасибо Tempo! Я в восторге!
Это именно то что мне было нужно! Кратко и компактно! Теперь не нужно будет html в txt конвертировать.
Сам я к этому долго бы шел )).
С меня +++ к карме!
Как хорошо что есть так классный форум и его участники!
 
Верх