Мы создаем множество переменных, которые используем для хранения различных фрагментов данных в наших скриптах. Но эта информация хранится в программе без возможности «вытащить ее». Более того, когда программа закрывается, информация теряется. Одним из способов получения информации, доступной извне, и сохранения ее на долго является создание файла и запись информации в него.
FileOpen
Во-первых, нам нужно «открыть» новый файл с помощью функции FileOpen (которую также можно использовать для открытия существующего файла).
FileOpen имеет два параметра: имя файла (которое должно включать путь к нашему файлу) и необязательный параметр «mode», используемый для определения определенных параметров, например, переписываем ли мы данные в файл, добавляем и т.д.
Одна строка кода создаст наш новый файл:
- Это макрос. Теперь нам нужно понять, что этот макрос является ярлыком, который предоставляет путь к каталогу, в котором находится наш скрипт. Если бы у нас не было этого ярлыка, нам пришлось бы использовать полный путь, такой как «c: \ documents and settings \ user \ files \ autoit\myfile.txt». Другое преимущество заключается в том, что наша программа может запускаться на компьютерах других людей, которые имеют разные папки и каталоги. Если их папки отличаются, ваша программа может не работать. Использование макроса гарантирует, что независимо от пути — ваш скрипт найдет его. Обратите внимание на использование амперсанда и обратную косую черту перед именем файла. Это добавляет обратную косую черту и имя файла в путь к скрипту.
- Это то, как мы навезем наш файл. В нашем случае «myfile.txt».
- Это дополнительный параметр режима. В этом случае мы используем 2, который сигнализирует функции, что мы хотели бы перезаписать все, что находится в файле.
FileOpen возвращает «дескриптор», который мы сохраняем в нашей переменной $ myFile, когда эта строка кода выполняется. Вы можете использовать этот дескриптор для последующих функций файла.
1 |
$myFile = FileOpen(@ScriptDir & "\myfile.txt", 2) |
FileWrite
Теперь нам нужно добавить некоторые данные в наш файл. Для этого создадим форму с полем для ввода имени файла($input_filename), текта файла($input_filetext) и кнопку, которая будет вызывать функцию создающую новый файл. Возьмем переменную из поля $input_filetext и запишем ее в наш вновь созданный файл с помощью функции FileWrite.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
#include <StaticConstants.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #Include <GuiButton.au3> #include <EditConstants.au3> Local $File_example = GUICreate("File_example",456,420,-1,-1,-1,-1) Local $EditField = GUICtrlCreateEdit("",10,180,438,220,-1,-1) Local $button_Create_File = GUICtrlCreateButton("Создать файл",290,10,100,30,-1,-1) Local $input_filename = GUICtrlCreateInput("Тест",118,20,150,20,-1,$WS_EX_CLIENTEDGE) GUICtrlCreateLabel("Имя файла",20,20,82,15,-1,-1) GUICtrlSetBkColor(-1,"-2") GUICtrlCreateLabel("Текст",19,60,82,15,-1,-1) GUICtrlSetBkColor(-1,"-2") Local $input_filetext = GUICtrlCreateInput("Привет мир",117,60,150,20,-1,$WS_EX_CLIENTEDGE) Local $button_Write_File = GUICtrlCreateButton("Добавить запись",289,50,100,30,-1,-1) GUISetState(@SW_SHOW,$File_example) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $button_Create_File _Create_File() Case $button_Write_File _Write_File() EndSwitch WEnd ; #FUNCTION# ==================================================================================================================== ; Name ..........: _Create_File ; Description ...: Создание нового файла .txt ; Syntax ........: _Create_File() ; Parameters ....: None ; Return values .: None ; Author ........: Hodogor ; Modified ......: ; Remarks .......: ; Related .......: ; Link ..........: ; Example .......: No ; =============================================================================================================================== Func _Create_File() $sFileName = GUICtrlRead($input_filename) $myFile = FileOpen(@ScriptDir & "\" & $sFileName & ".txt", 2) GUICtrlSetData($EditField,@CRLF & @HOUR & ':' & @MIN & ':' & @SEC & "/Создан файл - " & @CRLF & @ScriptDir & "\" &$sFileName & ".txt",1) EndFunc |
FileWrite имеет два параметра: имя файла или дескриптор файла и строку.
1 2 3 4 5 6 7 8 |
Func _Write_File() $sFileName = GUICtrlRead($input_filename) $myFile = FileOpen(@ScriptDir & "\" & $sFileName & ".txt", 2) $myString = GUICtrlRead($input_filetext) FileWrite($myFile,$myString) FileClose($myFile) GUICtrlSetData($EditField,@CRLF & @HOUR & ':' & @MIN & ':' & @SEC & "/Сделана запись в файл - " & @CRLF & @ScriptDir & "\" &$sFileName & ".txt",1) EndFunc |
В приведенном выше примере мы вызвали функцию FileWrite с дескриптором имени файла, который мы получили из поля функцией GUICtrlRead в первой строке кода, что означает, что мы сделаем запись в файл txt, расположенный в том же каталоге, что и наш скрипт. Второй параметр взят из поля input с дескриптором $input_filetext, куда можно ввести текст который надо записать в файл.
Если файл все еще открыт, он не будет использоваться. Чтобы закрыть его, мы вызываем функцию FileClose, которая имеет только один параметр Filename / handle. Результат работы можно записать поле edit.
Если вы откроете файл, вы увидите следующее:
StringSplit
Так же, как с несколькими строками кода, мы создали файл. Это был очень упрощенный пример. Что если бы мы хотели создать файл персонализированных приветствий, сгенерированных нами.Как это будет выглядеть?
1 2 3 4 5 6 7 8 9 10 11 |
Func _Write_Array_File() $sFileName = GUICtrlRead($input_filename) $myFile = FileOpen(@ScriptDir & "\" & $sFileName & ".txt", 2) ;1 $myArray = StringSplit(GUICtrlRead($input_filearray),",") ;2 For $a =1 To UBound($myArray)-1 FileWrite($myFile,@CRLF & @HOUR & ':' & @MIN & ':' & @SEC & " / Это сообщение для-" & $myArray[$a]) ;3 Next ;4 FileClose($myFile) ;5 GUICtrlSetData($EditField,@CRLF & @HOUR & ':' & @MIN & ':' & @SEC & "/Массив успешно записан в файл - " & @CRLF & @ScriptDir & "\" &$sFileName & ".txt",1) EndFunc |
- Мы создаем наш файл так же, как и в предыдущем примере.
- Мы разбиваем имена на массив, используя StringSplit.
- Пишем приветствия в наш файл.
- После завершения цикла for скрипт будет продолжен.
- Следующее, что мы делаем, это закрываем файл.
Теперь, когда мы снова откроем наш файл, мы увидим следующее:
FileRead
К этому моменту мы успешно создали файл, в него данные и закрыли его, чтобы мы могли получить доступ к нему и просмотреть его содержимое. Этот последний шаг, когда мы вручную нашли файл и открыли его, могут также быть автоматизированным. FileRead — это функция AutoIt, которая, как следует из названия, позволяет нам программно читать файл. Он имеет один обязательный параметр для имени файла / дескриптора. Он также имеет необязательный параметр, если вы хотите ограничить количество прочитанных символов.
1 2 3 4 5 6 |
Func _Read_File() $sFileName = GUICtrlRead($input_filename) $fileIn = FileRead(@ScriptDir & "\" & $sFileName & ".txt") GUICtrlSetData($EditField,@CRLF & @HOUR & ':' & @MIN & ':' & @SEC & "/Содержимое файла: " & $sFileName & @CRLF & $fileIn,1) MsgBox(0,'',$fileIn) EndFunc |
В приведенном выше коде мы создали переменную $ fileIn для хранения содержимого файла, считанного с помощью функция FileRead. Файл, который мы читаем, тот же, который мы только что создали. Поэтому, когда мы ставим содержимое переменной $fileIn в поле сообщения мы увидим следующее:
FileOpenDialog
Существует еще одна отличная функция, которая откроет окно поиска файла или каталога, чтобы пользователь мог выберите данный файл. Это функция FileOpenDialog. Вместо жесткого указания файла, который мы хотели прочитать в нашем предыдущем примере, мы могли бы просмотреть и выбрать его вручную.
1 2 3 4 |
Func _Open_File() $var = FileOpenDialog("Выбрать файл", @ScriptDir & "\", "Текстовые файлы (*.txt)", 1 + 8) GUICtrlSetData($EditField,@CRLF & @HOUR & ':' & @MIN & ':' & @SEC & "Вы выбрали " & @CRLF & $var & @CRLF ,1) EndFunc |
Этот код создаст диалоговое окно с открытием нового файла с заголовком «Выбрать файл», который по умолчанию будет отображаться доступные файлы в начальном каталоге, который мы указали, — в этом случае наш каталог скриптов. Последний параметр — это фильтр. В нашем случае нас интересует только просмотр текстовых файлов. Если вы запустите код и у вас все еще есть файл, который мы создали ранее в главе вашего каталога скриптов, вы должны увидеть следующие:
Код и файл проекта можно скачать ниже по ссылке:
[sdm_download id=»660″ fancy=»2″]