Что нового

перебор строк в текстовом файле (остановка на 65524 строке)

furia

Новичок
Сообщения
8
Репутация
0
Имеется файл в нем например 150 000 тыс строк
вот такой функцией я читаю их из файла вывожу в ListViewItem
программа не завершает работу и не продолжает после того как счетчик достигнет 65524 значения.
как сделать что бы он считал весь файл и вывел в ListViewItem все данные.

Код:
Func LoadFile()

   Local $count = 0

   $FileLoad = FileOpen($PathLoadName & $FileLoadName, 0)
   if $FileLoad = -1 Then
	  MsgBox(4096, "Ошибка", "Невозможно открыть файл или отсутвует.")
   EndIf

   While 1
	  $count = $count + 1
	  $sLine = FileReadLine($FileLoad)
	  If @error = -1 Then ExitLoop
	  GUICtrlCreateListViewItem($count & '|' & $sLine, $iListView)
	  ;MsgBox(0, "", $sLine)
   WEnd

   FileClose($FileLoad)

EndFunc
 

MnM

Post-Hardcore
Сообщения
679
Репутация
90
furia
Справка -> Приложения -> Ограничения AutoIt сказал(а):
GUI_MAXCONTROLS = 65532 Максимальное кол-во элементов управления GUI.
Это ограничение на кол-во элементов в окне GUI, вы уже создали изначально 8 элементов управления остальные заполнила ваша функция.
Попробуйте обойти эту проблему созданием альтернативы вашему ListView
 

joiner

Модератор
Локальный модератор
Сообщения
3,557
Репутация
628
пример из справки. чуть укоротил. создает 150 000 пунктов
Код:
#include <GuiListView.au3>
#include <GUIConstantsEx.au3>

GUICreate("Добавление пунктов в ListView", 400, 300)
$iListView = GUICtrlCreateListView("", 2, 2, 394, 268)
GUISetState()
_GUICtrlListView_InsertColumn($iListView, 0, "Колонка 1", 100)
For $i = 1 To 150000
	_GUICtrlListView_AddItem($iListView, "Пункт " & $i, $i, 34)
Next

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
 

MnM

Post-Hardcore
Сообщения
679
Репутация
90
А почему же тогда
Код:
GUICtrlCreateListViewItem

Не работает так же как и UDF?
 

joiner

Модератор
Локальный модератор
Сообщения
3,557
Репутация
628
нативные функции имеют различные ограничения. поэтому есть udf, в которых собраны подобные функции
впрочем, любая функция имеет ограничения какие- то. поэтому комбинируем и создаем свои
как я это понимаю. да вроде и так все понятно то :smile:


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

если посмотреть udf то там предусмотрено максимальное количество строк
Код:
If $iIndex = -1 Then $iIndex = 999999999

в функции
Код:
_GUICtrlListView_InsertItem

которая по сути и создает элемент. в нативной видимо стоит свой предел
 
Автор
F

furia

Новичок
Сообщения
8
Репутация
0
Спасибо за наводку ! :smile:

а по колонкам как поделить ? т.е.
если у меня Табло из 2х или 3х колонок.
 

joiner

Модератор
Локальный модератор
Сообщения
3,557
Репутация
628
furia
смотри справку
Код:
_GUICtrlListView_AddSubItem
 

AZJIO

Меценат
Меценат
Сообщения
2,892
Репутация
1,196
Возможно вывод такого огромного количества пунктов нерационален. Например, пол-минуты приходится ждать загрузку 150 тыс. пунктов. Можно сделать постраничный вывод, например сделать Combo с пунктами:
0-15 000
15 001-30 000
30 001-45 000
и т.д.
И из массива подгружать необходимую страницу. 15 тыс. загружается 4 сек. Ни один человек не станет просматривать все 150 тыс. пунктов, даже пару тысяч будет утомительно.
 
Верх