Что нового

Ошибка в чтение данных с массива

bulldog5293

Знающий
Сообщения
172
Репутация
9
Прошу прощенья за неучёт с моей стороны, забыл убрать лишнее. Проблема в том что у меня то строки остаются пустыми где данные с файла должны стоять, то на ошибку ссылается
Код:
_GUICtrlListView_AddArray($listview, $aItems)
_GUICtrlListView_AddArray($listview, ^ ERROR

Сам скрипт вот:
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Include <GuiListView.au3>
#include <GUIConstants.au3>
Global $Ini = @ScriptDir&'\test.txt' ; путь к test.txt
$answer = ""
If $answer = "6" Then
$iniopen = FileOpen($Ini,1)
FileWrite($iniopen,  _
dim $aItems [5] [5] = [ _ 
[ $i, 2], _ 
[ 2, "1"], _ 
[ 3, "3 элемент"], _ 
[ 4, "4 элемент"], _ 
[ 5, "5 элемент"] ]
FileClose($iniopen)
EndIf
; открываем файл, читаем его
$file = FileOpen($Ini, 0)
$filetext = FileRead($file)
FileClose($file)
;кусок кода из UDF File.au3 для разделения образца построчно в массив
    If StringInStr($filetext, @LF) Then
        $aFiletext = StringSplit(StringStripCR($filetext), @LF)
    ElseIf StringInStr($filetext, @CR) Then ;; @LF does not exist so split on the @CR
        $aFiletext = StringSplit($filetext, @CR)
    Else ;; unable to split the file
        If StringLen($filetext) Then
            Dim $aFiletext[2] = [1, $filetext]
            Exit
        EndIf
    EndIf
; конец куска UDF File.au3
$hForm1 = GUICreate("GUICtrlCreateListView ", 400, 400, 300, 150, _ 
BitOR($WS_SYSMENU,$WS_CAPTION,$WS_POPUP,$WS_POPUPWINDOW,$WS_BORDER,$WS_CLIPSIBLINGS, $WS_EX_ACCEPTFILES))

$listview = GUICtrlCreateListView ( "Сайт      |Логин      ", 0, 0 , 360 , 360, $GUI_SS_DEFAULT_LISTVIEW, _ 
BitOR($LVS_EX_HEADERDRAGDROP, $LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT ))

_GUICtrlListView_SetColumnWidth($listview, 0, 205)
_GUICtrlListView_SetColumnWidth($listview, 1, 150)

_GUICtrlListView_AddArray($listview, $aItems)

GUICtrlSetState($listview, $GUI_DROPACCEPTED)
GUISetState(@SW_SHOW)

Do
    $msg = GUIGetMsg()
Until $msg = -3 ; такой вот выход из скрипта

Надеюсь на понимание с вашей стороны, что sc` таки мы люди, а не машины :smile:
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 712
Ты уверен что здесь все правильно? Массив нельзя таким вот способом записать в файл.

Код:
FileWrite($iniopen,  _
dim $aItems [5] [5] = [ _
[ $i, 2], _
[ 2, "1"], _
[ 3, "3 элемент"], _
[ 4, "4 элемент"], _
[ 5, "5 элемент"] ]
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
Re: Чтение данных с массива

Код:
$answer = ""
If $answer = "6" Then

Эти две строки взаимоисключающие. Оттого и $aItems не определен, т.к. находится внутри ветви условного оператора который заведомо не реализуется
Код:
FileWrite($iniopen,  _
dim $aItems [5] [5] = [ _
[ $i, 2], _
[ 2, "1"], _
[ 3, "3 элемент"], _
[ 4, "4 элемент"], _
[ 5, "5 элемент"] ]

написан нонсенс, что ты хочешь записать в файл? элементы массива?
это делается по другому. к каждому элементу массива нужно обращаться поэлементно либо в цикле, либо явно
дальше уже не хочется разбираться, т.к. становится туманным цель. разъясни, возможно надо делать по другому
 
Автор
B

bulldog5293

Знающий
Сообщения
172
Репутация
9
Я ошибся там не FileWrite , а FileRead и мне не записать а прочитать нада, просто я только так думаю данные по колонкам рассортировать, тоесть 1,2-4,5 самый понятный пример нашёл, над ним и мучаюсь
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 712
bulldog5293, я думаю тебе нужно более подробно описать то, что ты хочешь сделать (по пунктам), а из всего вышеописанного ничего не понятно.
 
Автор
B

bulldog5293

Знающий
Сообщения
172
Репутация
9
Нашёл тут на форуме этот скрипт
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Include <GuiListView.au3>

dim $aItems [5] [3] = [ _ 
[ 1, "1 элемент"], _ 
[ 2, "2 элемент"], _ 
[ 3, "3 элемент"], _ 
[ 4, "4 элемент"], _ 
[ 5, "5 элемент"] ]

$hForm1 = GUICreate("GUICtrlCreateListView ", 400, 400, 300, 150, _ 
BitOR($WS_SYSMENU,$WS_CAPTION,$WS_POPUP,$WS_POPUPWINDOW,$WS_BORDER,$WS_CLIPSIBLINGS, $WS_EX_ACCEPTFILES))

$hList = GUICtrlCreateListView ( "Сайт      |Логин      ", 0, 0 , 360 , 360, $GUI_SS_DEFAULT_LISTVIEW, _ 
BitOR($LVS_EX_HEADERDRAGDROP, $LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT ))

_GUICtrlListView_SetColumnWidth($hList, 0, 205)
_GUICtrlListView_SetColumnWidth($hList, 1, 150)

_GUICtrlListView_AddArray($hList, $aItems)

GUICtrlSetState($hList, $GUI_DROPACCEPTED)
GUISetState(@SW_SHOW)

Do
$nMsg = GUIGetMsg()
Until $nMsg = $GUI_EVENT_CLOSE
exit


После долгих манипуляций получил
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Include <GuiListView.au3>
#include <GUIConstants.au3>
Global $Ini = @ScriptDir&'\test.txt' ; путь к test.txt
$answer = ""
If $answer = "6" Then
$iniopen = FileOpen($Ini,1)
FileRead($iniopen,  _
dim $aItems [5] [5] = [ _ 
[ $i, 2], _ 
[ 2, "3"], _ 
[ 3, "3 элемент"], _ 
[ 4, "4 элемент"], _ 
[ 5, "5 элемент"] ]
FileClose($iniopen)
EndIf
; открываем файл, читаем его
$file = FileOpen($Ini, 0)
$filetext = FileRead($file)
FileClose($file)
;кусок кода из UDF File.au3 для разделения образца построчно в массив
    If StringInStr($filetext, @LF) Then
        $aFiletext = StringSplit(StringStripCR($filetext), @LF)
    ElseIf StringInStr($filetext, @CR) Then ;; @LF does not exist so split on the @CR
        $aFiletext = StringSplit($filetext, @CR)
    Else ;; unable to split the file
        If StringLen($filetext) Then
            Dim $aFiletext[2] = [1, $filetext]
            Exit
        EndIf
    EndIf
; конец куска UDF File.au3
$hForm1 = GUICreate("GUICtrlCreateListView ", 400, 400, 300, 150, _ 
BitOR($WS_SYSMENU,$WS_CAPTION,$WS_POPUP,$WS_POPUPWINDOW,$WS_BORDER,$WS_CLIPSIBLINGS, $WS_EX_ACCEPTFILES))

$listview = GUICtrlCreateListView ( "Сайт      |Логин      ", 0, 0 , 360 , 360, $GUI_SS_DEFAULT_LISTVIEW, _ 
BitOR($LVS_EX_HEADERDRAGDROP, $LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT ))

_GUICtrlListView_SetColumnWidth($listview, 0, 205)
_GUICtrlListView_SetColumnWidth($listview, 1, 150)

_GUICtrlListView_AddArray($listview, $aItems)

GUICtrlSetState($listview, $GUI_DROPACCEPTED)
GUISetState(@SW_SHOW)

Do
    $msg = GUIGetMsg()
Until $msg = -3 ; такой вот выход из скрипта

Каторый ссылается на ошибку, что я описывал выше. Так работает, но не читает данные с файла
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Include <GuiListView.au3>
#include <GUIConstants.au3>
[email protected]&"\test.txt"
$FILE=FileOpen($ADDR,0) ; Режим чтения
$TEXT=FileRead($FILE)
FileClose($FILE)
$i= FileReadLine("test.txt", 1)
$Text=GUICtrlRead(FileReadLine($i, 1))

dim $aItems [5] [3] = [ _ 
[ $i, 2], _ 
[ 2, "1"], _ 
[ 3, "3 элемент"], _ 
[ 4, "4 элемент"], _ 
[ 5, "5 элемент"] ]

$hForm1 = GUICreate("GUICtrlCreateListView ", 400, 400, 300, 150, _ 
BitOR($WS_SYSMENU,$WS_CAPTION,$WS_POPUP,$WS_POPUPWINDOW,$WS_BORDER,$WS_CLIPSIBLINGS, $WS_EX_ACCEPTFILES))

$hList = GUICtrlCreateListView ( "Сайт      |Логин      ", 0, 0 , 360 , 360, $GUI_SS_DEFAULT_LISTVIEW, _ 
BitOR($LVS_EX_HEADERDRAGDROP, $LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT ))

_GUICtrlListView_SetColumnWidth($hList, 0, 205)
_GUICtrlListView_SetColumnWidth($hList, 1, 150)

_GUICtrlListView_AddArray($hList, $aItems)

GUICtrlSetState($hList, $GUI_DROPACCEPTED)
GUISetState(@SW_SHOW)

Do
$nMsg = GUIGetMsg()
Until $nMsg = $GUI_EVENT_CLOSE
exit


Я хочу понять где я ошибся, тоесть чтобы он читал данные с txt\ini файла построчно и вставлял их в таблицу, тоесть 1-2 и 4-5. Как ещё описать незнаю :Censored:
 

snoitaleR

AutoIT Гуру
Сообщения
854
Репутация
223
bulldog5293
Я правильно думаю: нужно считать из txt-файла строчки, нечетные загрузить в первую колонку ListView, четные - во вторую?
 
Автор
B

bulldog5293

Знающий
Сообщения
172
Репутация
9
Почти, там нада чтобы 1 строка в 1-й калонке была, вторая во второй, 4 в первой, пятая во второй


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

Я сам как понимаю, то там через FileReadLine нада, но как его под такую задачу одаптировать непойму :(
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 712
Так?

Код:
#Include <Array.au3>

Global $Even = 1, $Count = 0

Dim $aItems[100][2]

$hFile = FileOpen('test.txt', 0)
While 1
    $Line = FileReadLine($hFile)
    If @error Then
		ExitLoop
	EndIf
	$Even = Not $Even
	$aItems[$Count][$Even] = $Line
	If $Even Then
		$Count += 1
		If $Count > UBound($aItems) - 1 Then
			ReDim $aItems[UBound($aItems) + 100][2]
		EndIf
	EndIf
WEnd
FileClose($hFile)
If $Count Then
	ReDim $aItems[$Count][2]
EndIf

_ArrayDisplay($aItems)
 

snoitaleR

AutoIT Гуру
Сообщения
854
Репутация
223
bulldog5293
И мой вариант... Как всегда замудреный... Но задача тоже замудреная... :smile:

Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Include <GuiListView.au3>
#include <GUIConstants.au3>

[email protected]&"\test.txt"

$FILE=FileOpen($ADDR,0)

$NSTR=0 ; Количество строк в файле

While True
 $TEXT=FileReadLine($FILE)
 If @error=-1 Then ExitLoop
 $NSTR+=1
Wend

FileClose($FILE)

$NSTR=Ceiling($NSTR/3) ; Количество строк массива

Dim $ARR[$NSTR][2] ; Массив для ListView

$ROW=0
$COL=0
$TRIGGER=0

$FILE=FileOpen($ADDR,0)

While $ROW<$NSTR
 $ARR[$ROW][$COL]=FileReadLine($FILE)
 If @error=-1 Then ExitLoop
 If $TRIGGER=0 Then
  $COL+=1
  $TRIGGER=1
 ElseIf $TRIGGER=1 Then
  $ROW+=1
  $COL=0
  $TRIGGER=2
 Else
  $TRIGGER=0
 EndIf
WEnd

FileClose($FILE)

$hForm1 = GUICreate("GUICtrlCreateListView ", 400, 400, 300, 150, _
BitOR($WS_SYSMENU,$WS_CAPTION,$WS_POPUP,$WS_POPUPWINDOW,$WS_BORDER,$WS_CLIPSIBLINGS, $WS_EX_ACCEPTFILES))

$hList = GUICtrlCreateListView ( "Сайт      |Логин      ", 0, 0 , 360 , 360, $GUI_SS_DEFAULT_LISTVIEW, _
BitOR($LVS_EX_HEADERDRAGDROP, $LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT ))

_GUICtrlListView_SetColumnWidth($hList, 0, 205)
_GUICtrlListView_SetColumnWidth($hList, 1, 150)

_GUICtrlListView_AddArray($hList, $ARR)

GUICtrlSetState($hList, $GUI_DROPACCEPTED)
GUISetState(@SW_SHOW)

Do
$nMsg = GUIGetMsg()
Until $nMsg = $GUI_EVENT_CLOSE
exit
 
Автор
B

bulldog5293

Знающий
Сообщения
172
Репутация
9
snoitaleR
Цитата
bulldog5293
И мой вариант... Как всегда замудреный... Но задача тоже замудреная...
Ещё как мудрённый ;D, у меня ошибка на Dim $ARR[$NSTR][2] падает :(


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

Поменял $NSTR=0 на $NSTR=3, но всё равно лист пустой выходит, всего в файле 6 строки, мне нада вывести первые 2 и, 4-ю и 5-ю строку, пока поэксперементирую с твоим вариантом


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

Сории, аказывается, я не через тот скрипт сидел, тоесть не на том месте где лежит файл, скрипт работает 100%. СПС
 
Верх