Что нового

Отображение в GUICtrlCreateListView данных из txt\ini файле

bulldog5293

Знающий
Сообщения
172
Репутация
10
У вас как ночь так форум оживает, собствено всех с ночью доброй. Облазил форум, но токого не нашёл. И решил спросить сам. Как можно в GUICtrlCreateListView вставить данные из txt\ini файла строго по калонкам, тоесть в 1-ю колонку 1-е данные, во 2-ю колонку 2-е. Для пробы брал из справки этот скрипт, но так и не понял как даже в него вставить считывание из файла
Код:
#include <GUIConstants.au3>
GUICreate("",220,250, 100,200,-1)
$listview = GUICtrlCreateListView ("Данные                                                ",1,1,200,242);,$LVS_SORTDESCENDING)
GUISetState()
Do
  $msg = GUIGetMsg ()
Until $msg = $GUI_EVENT_CLOSE
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
bulldog5293
Попробуйте так
Код:
#include <GUIConstants.au3>
$sText = ""
For $i = 1 To 4
	$sText &= FileReadLine("1.txt", $i) & "|"
Next

GUICreate("", 280, 250, -1, -1)
$listview = GUICtrlCreateListView("1 Данные|2 Данные|3 Данные|4 Данные", 1, 1, 300, 242)
$item1 = GUICtrlCreateListViewItem($sText, $listview)
GUISetState()
Do
	$msg = GUIGetMsg()
Until $msg = $GUI_EVENT_CLOSE
 
Автор
B

bulldog5293

Знающий
Сообщения
172
Репутация
10
СПС madmasles, то что нужно, для меня тема вроде закрыта, оставлю открытой т.к. вдруг у кого ещё вопросы по теме будут
P.S тема открыта на расмотрение модератора, если ришит закрыть так пусть
 
Автор
B

bulldog5293

Знающий
Сообщения
172
Репутация
10
А если в txt файле данных несколько, ну к примеру 12 строк, как тогда вывести можно 1,2,4,5,7,8,10,11 строку?
 

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
bulldog5293
Предлагаю вариант с использованием массива:

Код:
; НАЧАЛО

 #Include <File.au3>

 Dim $ARRAY

 $ADDR="config.txt"

 _FileReadToArray($ADDR,$ARRAY) ; 0-ой элемент массива содержит количество строк

 MsgBox(0,"",$ARRAY[5]) ; Выводим 5-ую строку

; КОНЕЦ
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
bulldog5293
Если не важна читабельность данных из txt\ini файле, то используй StringSplit для разбиения в массив, типа A|F|E|H|T|E|Y
$aMacciv = StringSplit($fileini, "|")
Если требуется массив в массиве, например A,B|F,Y|E,W|H,N|T,U|E,V|Y,S
То дважды извлекаешь командой StringSplit
$aMacciv = StringSplit($fileini, "|")
For $i = 1 to $aMacciv[0]
$aSubMacciv = StringSplit($aMacciv[$i ], ",")
Next

В итоге $aMacciv[1] содержит A,B
$aSubMacciv[1]=A
$aSubMacciv[2]=B

Именно таким массивом можно заполнить таблицу в виде итемов как строк и колонок.
_FileReadToArray($ADDR,$ARRAY) - тот же массив, только в качестве разделителя переход на новую строку
 
Автор
B

bulldog5293

Знающий
Сообщения
172
Репутация
10
Тоесть я как понял, мне
Код:
$ADDR=@ScriptDir&"\text.txt"
$FILE=FileOpen($ADDR,0) ; Режим чтения
$TEXT=FileRead($FILE)
FileClose($FILE)
$TEXT=StringReplace($TEXT,@CRLF,"|")
For $i = 1 To 3
    $TEXT &= FileReadLine("text.txt", $i)
Next

Надо заменить на это
Код:
$aMacciv = StringSplit($fileini, "|")
For $i = 1 to $aMacciv[0]
   $aSubMacciv = StringSplit($aMacciv[$i ], ",")
Next

В итоге $aMacciv[1] содержит A,B
$aSubMacciv[1]=A
$aSubMacciv[2]=B
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
bulldog5293
Надо заменить на это
ну а если логически подумать, что такое $fileini? как StringSplit будет выполнять $fileini? Можно было заменить и попробовать уже скрипт в деле, мессага сама скажет чего ей не понятно. У меня со строки 6 ошибка... удалил, опять строка 6, удалил переменные, которые в конце, опять ошибка, уже в строке 1, так символ вроде крышка называется (стрелка вверх, она же степень числа) показывает в каком месте интерпретатор входит в стопор, т.е. на переменной $fileini. Значит $fileini должен что-то содержать, наверно данные масива мы хотели разложить по полочкам. Данных нет, значит надо придумать как их туда засунуть. Например чтением файла или чтением ini-файла. Первый вариант проще, открыл и используй $fileini=FileRead(@ScriptDir&'\votono.ini'). Вставил, запустил, нифига... ага, инишник то кто делать будет, копирнул имя, копирнул массив с буквами, сделал, опять нифига... дык месагу повесить надо MsgBox(0, "Сообщение", $aSubMacciv[2]), массив то прочитался но ничё не сказал... а с мессагой выдаёт всё что в массиве написано...
Надеюсь прежде чем задавать вопросы вы сами тоже пробуйте иначе какой то детский сад.

Вот архив для справки...
 
Автор
B

bulldog5293

Знающий
Сообщения
172
Репутация
10
попробуй так:
Код:
#include <GUIConstants.au3>
 #Include <File.au3>
  Dim $ARRAY
   $ADDR=$sText
$sText = ""
For $i = 2 To 4
    $sText &= FileReadLine("1.txt", $i) & "|"
Next
 _FileReadToArray($ADDR,$ARRAY)
GUICreate("", 280, 250, -1, -1)
$listview = GUICtrlCreateListView("1 Данные|2 Данные|3 Данные|4 Данные", 1, 1, 300, 242)
$item1 = GUICtrlCreateListViewItem($sText, $listview)
GUISetState()
 MsgBox(0,"",$ARRAY[5]) ; Выводим 5-ую строку
Do
    $msg = GUIGetMsg()
Until $msg = $GUI_EVENT_CLOSE

Хотяб подскажите как для
Код:
$aSubMacciv[1]=A
$aSubMacciv[2]=B

данные брать
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
bulldog5293

готовое

Код:
;  вот оно 19.04.2010
;#NoTrayIcon ;скрыть в системной панели индикатор AutoIt
Global $Ini = @ScriptDir&'\Data.txt' ; путь к Data.txt

;Проверка существования Data.txt и создание при его отсутствии
$answer = ""
If Not FileExists($Ini) Then $answer = MsgBox(4, "Выгодное предложение", "Хотите создать необходимый Data.txt"&@CRLF&"для хранения данных?")
If $answer = "6" Then
$iniopen = FileOpen($Ini,1)
FileWrite($iniopen,  _
'1вапыа|dsfgsd|wert|45346345|ff' & @CRLF & _
'2вапыа|dsfgsd|wert|45346345|ff' & @CRLF & _
'3вапыа|dsfgsd|wert|45346345|ff' & @CRLF & _
'4вапыа|dsfgsd|wert|45346345|ff' & @CRLF & _
'5вапыа|dsfgsd|wert|45346345|ff' & @CRLF & _
'6вапыа|dsfgsd|wert|45346345|ff' & @CRLF & _
'7вапыа|dsfgsd|wert|45346345|ff' & @CRLF & _
'8вапыа|dsfgsd|wert|45346345|ff' & @CRLF & _
'9вапыа|dsfgsd|wert|45346345|ff' & @CRLF & _
'0вапыа|dsfgsd|wert|45346345|ff' & @CRLF & _
'13вапыа|dsfgsd|wert|45346345|ff' & @CRLF & _
'32вапыа|dsfgsd|wert|45346345|ff' & @CRLF & _
'45вапыа|dsfgsd|wert|45346345|ff' )
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]
		Else
			MsgBox(0, "Сообщение", "нет данных")
			Exit
		EndIf
	EndIf
; конец куска UDF File.au3

; теперь все переменные в основном будут обрабатываться в цикле и поэтому сохраним размерность массива в короткую переменную
$n=UBound($aFiletext) - 1

GUICreate("", 480, 350, -1, -1)
$listview = GUICtrlCreateListView("1 Данные|2 Данные|3 Данные|4 Данные|5 Данные", 1, 1, 480, 350)

For $i = 1 to $n ; создаём переменные в цикле
	Assign('item' & $i, GUICtrlCreateListViewItem($aFiletext[$i], $listview)) ; создаём переменные, итемы
	;Assign('aLine_'&$i, StringSplit($aFiletext[$i], "|")) ; создаём массивы, где каждое слово будет иметь переменную.
	$aLineItem = StringSplit($aFiletext[$i], "|")
	For $b = 1 to $aLineItem[0]
		Assign('aLineItem_'&$i&'_' & $b, $aLineItem[$b])
	Next
Next

GUISetState()
For $i = 1 to $n ; попробуем запарить мессагами
	MsgBox(0,"вот оно", Eval('aLineItem_'&$i&'_1')) ; вот один элемент массива
Next
 
Do
    $msg = GUIGetMsg()
Until $msg = -3 ; такой вот выход из скрипта
 
Верх