Что нового

[Элементы GUI] Помогите заменить имеющийся код на использование в нем _FileListToArray функции

fortages

Новичок
Сообщения
81
Репутация
3
Старалась назвать тему в соответствии с правилами, но в голове такая каша, что не знаю, правильно ли подписала.

Помогите, пожалуйста, разобраться.
Есть список фамилий в txt файлах (на каждого свой файл).
Пользователю по нажатию кнопки нужно показать перечень этих txt файлов в папке.
После того, как он выбрал с помощью checkbox нужные фамилии, занести содержание этих индивидуальных txt файлов в один общий - info.txt
Чтоб после работы программы в файле info.txt было что-то наподобии

Содержимое файла ivanov.txt
Содержимое файла sidorov.txt
Содержимое файла petrov.txt

Проблема следующая:
перечень файлов в папке показать получается
Код:
#include <GUIConstantsEx.au3>
#include <File.au3>
#include <WinAPIEx.au3>
#include <GuiListView.au3>

Dim $aDir[1] = ["C:\Users\usrs\Desktop\Test\data\default"]
$iInd = 0

$hGui = GUICreate('Аккаунты', 400, 320)
$nListView = GUICtrlCreateListView('', 2, 2, 394, 268, $GUI_SS_DEFAULT_LISTVIEW, _
        BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_CHECKBOXES, $LVS_EX_GRIDLINES))
$hListView = GUICtrlGetHandle($nListView)

_GUICtrlListView_AddColumn($nListView, 'Файл', 380)
$nButtonGo = GUICtrlCreateButton('ОК', 75, 280, 100, 30)
$ButtonExit = GUICtrlCreateButton('Выход', 225, 280, 100, 30)
GUISetState()

_WinAPI_EmptyWorkingSet()
While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
        Case $nButtonGo
            $aFiles = _FileListToArray($aDir[$iInd], '*', 1)
            If @error Then ContinueLoop
            Dim $aItems[$aFiles[0]][1]
            For $i = 1 To $aFiles[0]
                $aItems[$i - 1][0] = $aFiles[$i]
            Next
            $aFiles = 0
            _GUICtrlListView_DeleteAllItems($hListView)
            _GUICtrlListView_BeginUpdate($hListView)
            _GUICtrlListView_AddArray($nListView, $aItems)
            _GUICtrlListView_EndUpdate($hListView)
            ;_GUICtrlListView_SetItemChecked($nListView, -1) ;Check All
            WinSetTitle($hGui, '', $aDir[$iInd])
            $aItems = 0
            $iInd += 1
            If $iInd = 3 Then $iInd = 0
        Case $ButtonExit
            Exit
    EndSwitch
WEnd
операции с файлами тоже получаются
Код:
#include <File.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$Form1 = GUICreate("Second Test", 203, 137, 192, 124)
$Checkbox1 = GUICtrlCreateCheckbox("Иванов", 24, 16, 97, 17)
$Checkbox2 = GUICtrlCreateCheckbox("Петров", 24, 40, 97, 17)
$Checkbox3 = GUICtrlCreateCheckbox("Сидоров", 24, 64, 97, 17)
$Button1 = GUICtrlCreateButton("ОК", 64, 96, 75, 25)
GUISetState(@SW_SHOW)


$ivanov = "C:\Users\usrs\Desktop\Test\data\default\Иванов.txt"
FileOpen($ivanov, 0)
$petrov = "C:\Users\usrs\Desktop\Test\data\default\Петров.txt"
FileOpen($petrov, 0)
$sidorov = "C:\Users\usrs\Desktop\Test\data\default\Сидоров.txt"
FileOpen($sidorov, 0)


;чистка после предыдущего запуска программы
FileDelete("C:\Users\usrs\Desktop\Test\data\info.txt")
_FileCreate("C:\Users\usrs\Desktop\Test\data\info.txt")
$info = "C:\Users\usrs\Desktop\Test\data\info.txt"
FileOpen($info, 0)


While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
             Exit
			
        Case $Button1
             If GUICtrlRead($Checkbox1) = $GUI_UNCHECKED And GUICtrlRead($Checkbox2) = $GUI_UNCHECKED And GUICtrlRead($Checkbox3) = $GUI_UNCHECKED Then
                MsgBox(0, '', 'Не выбрали фамилию')
             EndIf
                
                If GUICtrlRead($Checkbox1) = $GUI_CHECKED Then 
															$buffer = FileRead($ivanov)
															FileWrite($info, $buffer)
														  EndIf
														  
				If GUICtrlRead($Checkbox2) = $GUI_CHECKED Then 
															$buffer = FileRead($petrov)
															FileWrite($info, $buffer)
														  EndIf
														  
				If GUICtrlRead($Checkbox3) = $GUI_CHECKED Then 
															$buffer = FileRead($sidorov)
															FileWrite($info, $buffer)
														  EndIf  
		
			  MsgBox(64,"Test", "Данные добавлены в файл")
			  Exit	  
    EndSwitch
WEnd
а слепить это в кучу не могу...
dash1.gif

то есть, второй пример работает как нужно, но в нем нужно вручную писать
Код:
GUICtrlCreateCheckbox("Иванов", 24, 16, 97, 17)

это неудобно, т.к. папка может в будущем пополниться новыми файлами, на которые не прописано
Код:
GUICtrlCreateCheckbox("newuser", 24, 16, 97, 17)

Просто так красивее даже внешне, если окно - как при использовании _FileListToArray, чем когда просто подписанные чекбоксы:
1bd4ff1b8285.jpg


Как можно сделать, чтобы было начало кода - отображение содержимого папки, а вторая часть - вот такая работа с файлами? Из первого примера дальше 24й строчки ничего не поняла. Стыдно, но не могу додуматься, что делать...
 

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
fortages
Вот такой пример:

Код:
; НАЧАЛО

 $GUI=GUICreate('Список фамилий')
 $LIST=GUICtrlCreateTreeView(10,40,-1,-1,0x0100)
 $START=GUICtrlCreateButton('Отчёт',10,10)

 Dim $A[1]=[0]
 
 $SEARCH=FileFindFirstFile('*.TXT')

 $COUNTER=1

 While True
  $FILE=FileFindNextFile($SEARCH)
  If @error Then ExitLoop
  If $FILE='INFO.TXT' Then ContinueLoop ; пропускаем файл отчёта
  $FAM=StringRegExpReplace($FILE,'^(.*)\.(.*)$','\1')
  ReDim $A[$COUNTER+1]
  $A[$COUNTER]=GUICtrlCreateTreeViewItem($FAM,$LIST)
  $COUNTER+=1
 WEnd

 FileClose($SEARCH)

 GUISetState() 

 While True
  Switch GUIGetMsg()
   Case -3
    Exit
   Case $START
    $REPORT=FileOpen('INFO.TXT',2)
    For $COUNTER=0 To UBound($A)-1
     $STATE=GUICtrlRead($A[$COUNTER])
     $FAM=GUICtrlRead($A[$COUNTER],1)
     If ($STATE=1) Or ($STATE=257) Then
      $CURRENT=FileOpen($FAM&'.TXT',0)
      $TEXT=FileRead($CURRENT)
      FileClose($CURRENT)
      FileWrite($REPORT,$TEXT&@CRLF)
     EndIf
    Next
    FileClose($REPORT)
  EndSwitch
 WEnd

; КОНЕЦ
 
Автор
fortages

fortages

Новичок
Сообщения
81
Репутация
3
snoitaleR огромное спасибо! Все заработало. :-[
 
Верх