Vba прочитать атрибуты файла
Разрешает выполнение операций ввода/вывода при работе с файлом.
Режим — устанавливает режим работы с файлом. Допустимые Значения: Append, Binary, Input, Output или RandomДоступ — устанавливает операции, разрешенные с открытым файлом. Допустимые значения: Read, Write или Read Write
Блокировка — устанавливает операции, разрешенные с открытым файлом другим процессам. Допустимые значения:
длина — число, меньшее либо равное 32 767 (байт). Для файлов, открытых в режиме Random, это значение является длиной записи. Для файлов с последовательным доступом это значение является числом буферизуемых символов Про инструкцию open важно также знать, что во время ее работы VBA также резервирует файловый буфер в памяти компьютера для ускорения процесса записи и считывания (прямое записывание информации на диск может существенно замедлить выполнение программы, что особенно заметно при работе с большими файлами). Максимальное число файловых буферов устанавливается в системном файле Config.sys
Завершает операции ввода/вывода с файлом, открытым с помощью инструкции open. Эта инструкция 'очищает буфер и указывает операционной системе обновить FAT (таблицу размещения файлов). Важно, чтобы каждый файл по завершении работы с ним был закрыт, иначе это может привести к частичной потере информации.
Закрывает все активные файлы, открытые с помощью инструкции open, и записывает содержимое всех буферов файлов
На диск, открытых с помощью инструкции Open
Функция возвращает доступный номер, который может использоваться в инструкции Open
Приведем пример инструкции, открывающей для записи бинарный файл первый из рабочей папки, и затем инструкции, закрывающей этот бинарный файл.
Ввод данных в файл последовательного доступа
Обсудим инструкции, используемые при вводе информации в файл последовательного доступа.
Записывает форматированные данные в файл последовательного доступа. Синтаксис:
Записывает неформатированные данные в файл последовательного доступа. В отличие от инструкции Print, инструкция write вставляет запятые между элементами и заключает строки в кавычки по мере записи их в файл.
СписокВывода — выражение или список выражений, записываемых в файл Данные, записанные с помощью инструкции write, обычно считываются из файла с помощью инструкции inputПриведем две процедуры, использующие инструкции Print и write для создания файлов последовательного доступа. Сначала рассмотрим процедуру с инструкцией
Open "С:\Новый" For Output As II
' Печатает текст в файл '
' Печатает пустую строку в файл
' Печатает в двух зонах печати
Результатом описанных выше инструкций будет файл со следующим содержимым:
Зона 1 Зона 2 3 пробела
Перейдем теперь к примеру процедуры, создающей файл последовательного
Достпа при помощи инструкции Write.
Результатом описанных выше инструкций будет файл со следующим содержимым:
Обратите внимание на автоматическое размещение в файле разделителей -запятых, и то, что строковая информация берется в кавычки. В процедуре
ПримерислользованияWrite вторая инструкция write специально заканчивается знаком ";" Это обеспечивает вывод данных третьей инструкцией write в ту же строку файла, в которую выводила вторая инструкция.
Вывод данных из файла последовательного доступа
Обсудим инструкции и функции вывода информации из файла последовательного доступа, а также функцию идентификации конца файла.
Синтаксис инструкции Line Input1 содержит следующие элементы:
ИмяПеременной — имя переменной типа Variant или StringЧисло задает число возвращаемых символов. Если аргумент Число равен 1, то производится посимвольное считывание данных.
Функция возвращает значение True при достижении конца файла.
EOF (НомерФайла> При последовательном считывании информации из файла часто используется следующий цикл:
Do While Not EOF(l) Loop
или, для тех пользователей, кто предпочитает инструкцию While - Wend инструкции Do While - Loop, следующий эквивалентный цикл:
While Not EOF (I) Wend
' Фамилия As String * 20
Оценка As String * 3
Dim Студент As Студенты
For Input As 12 i = 1
Do While Not EOF(2) With Студент
Cells(i, 1).Value = .Фамилия
Cells(i, 2).Value = .Оценка
Private Sub UserForm_Initialize()
Dim Студент As String
.Clear Do While Not EOF(l)
Line Input 11, Студент
Работа с файлом произвольного доступа
Приведем инструкции ввода/вывода информации при работе с файлом произвольного доступа, а также инструкции определения длины файла и текущей позиции указателя в файле.
Записывает содержимое переменной в файл произвольного доступа.
НомерЗаписи — номер записи (режим Random) или номер байта (режим Binary), с которого следует начать запись. Если аргумент НомерЗаписи опущен, то записывается на то место, где был установлен указатель после выполнения последней инструкции Get или Put, либо куда он переведен с помощью функции Seek ИмяПеременной — имя переменной, содержащей данные, которые следует записать в файлЧитает данные из открытого файла произвольного доступа в переменную. Синтаксис:
Функция возвращает значение типа Long, определяющее текущее положение указателя чтения/записи внутри файла, открытого с помощью инструкции Open.
Функция возвращает значение типа Long, представляющее размер файла в байтах, открытого с помощью инструкции Оpen . Для определения размера закрытого файла следует использовать функции FileLen.
Возвращает значение типа Long, содержащее размер файла в байтах.
В противоположность файлам последовательного доступа, в файлах произвольного доступа запись является встроенным элементом. Файл произвольного доступа — это файл, упорядоченный по записям, что позволяет быстро переместиться на любую запись, минуя предыдущие.
При создании файла произвольного доступа указывается максимальная длина каждой записи. Само собой разумеется, что в любую запись можно вводить данные, занимающие не все место, выделенное для записи, но нельзя ввести данные, требующие больше места, чем допустимая длина записи. Лишняя информация будет просто усекаться.
На практике бывает удобно создавать отдельный файл, в котором хранится информация о структуре файла произвольного доступа: структура записи, ее длина и заголовки полей.
Отметим, что при открытии файла произвольного доступа, в отличие от файла последовательного доступа, не надо специально указывать, открывается он для ввода или вывода информации. Ввод и вывод информации определяют команды Put и Get.
Приведем один, пример работы с файлом произвольного доступа группа Экономистов, который имеет ту же структуру, что и в предыдущем примере. Файл создается с помощью процедуры записьвоайл, которая последовательно считывает данные из первого и второго столбца рабочего листа и затем вводит их в файл. В этой процедуре число вводимых записей фиксировано и равно 5. Процедура Считываниеизфайла производит обратное действие — считывает данные из файла и вводит их в ячейки третьего и четвертого столбца рабочего листа. Интересной особенностью файла произвольного доступа является то, что при работе с ним можно определить число записей не пересчитывая их. Число записей равно отношению размера файла к длине одной записи. Длина записи устанавливается при создании файла произвольного доступа и определяется типом переменной, при помощи которой файл был создан, размер открытого файла возвращается функцией LOF, а еще не открытого — функцией FileLen. В рассматриваемом случае число записей в файле равно LOF(l) / Len(Студент).
Ниже приведен справочник по объекту FileSystemObject, который умеет работать с файлами, каталогами, файловыми потоками. Данный объект позволяет читать файлы, писать в файлы, получать информацию о файлах и др. Данный объект используется в ОС Windows, в некоторых скриптовых языках.
1. Создание объекта
2. Свойства
2.1. Drives
Замечание: только чтение.
3. Методы
3.1. CreateFolder
Назначение: создаёт каталог с указанным именем.
3.2. CopyFile
Назначение: копирует один или несколько файлов.
3.3. CopyFolder
Назначение: рекурсивно копирует каталог.
Описание: процесс копирования прерывается после первой возникшей ошибки.
3.4. MoveFile
Назначение: перемещает один или несколько файлов.
Описание: процесс перемещения прерывается после первой возникшей ошибки. Если перемещаемый файл уже существует или является папкой в Destination, возникнет ошибка.
3.5. MoveFolder
Назначение: рекурсивно перемещает один или несколько каталогов.
Описание: процесс перемещения прерывается после первой возникшей ошибки. Если перемещаемый каталог уже существует или является файлом в Destination, возникнет ошибка.
3.6. DeleteFile
Назначение: удаляет указанный файл.
3.7. DeleteFolder
Назначение: удаляет указанную папку.
3.8. BuildPath
3.9. GetAbsolutePathName
Назначение: возвращает полный путь для заданного относительного пути (из текущего каталога).
3.10. GetBaseName
Назначение: возвращает имя (без расширения) последнего компонента в заданном пути.
3.11. GetExtensionName
Назначение: возвращает расширение последнего компонента в заданном пути.
3.12. GetFileName
Назначение: возвращает имя (с расширением) последнего компонента в заданном пути.
3.13. GetParentFolderName
Назначение: возвращает путь к последнему компоненту в заданном пути (его каталог).
3.14. GetDriveName
Назначение: возвращает имя диска в заданном пути.
3.15. DriveExists
Назначение: возвращает True, если указанный диск сущесвтвует, и False в противном случае.
Назначение: возвращает True, если указанный файл сущесвтвует, и False в противном случае.
Назначение: возвращает True, если указанный каталог сущесвтвует, и False в противном случае.
3.19. GetFile
Описание: если файл не существует, произойдёт ошибка.
3.20. GetFolder
Описание: если каталог не существует, произойдёт ошибка.
3.21. GetSpecialFolder
Описание: если каталог не существует, произойдёт ошибка.
3.22. GetTempName
Назначение: возвращает случайным образом сгенерированное имя файла, которое может быть использовано для создания временного файла.
3.23. CreateTextFile
3.24. OpenTextFile
3.25. GetStandardStream
Описание: метод применим при запуске административного скрипта в консоли с помощью CScript.exe.
3.26. GetFileVersion
Назначение: возвращает номер версии исполняемого файла (строка).
4. Объект Drive
4.1. Создание объекта
4.2. Свойства
4.2.1. AvailableSpace
Замечание: только чтение.
4.2.2. DriveLetter
Замечание: только чтение.
4.2.3. DriveType
Замечание: только чтение.
4.2.4. FileSystem
Замечание: только чтение.
4.2.5. FreeSpace
Замечание: только чтение.
4.2.6. IsReady
Замечание: только чтение.
4.2.7. Path
Замечание: только чтение.
4.2.8. RootFolder
Замечание: только чтение.
4.2.9. SerialNumber
Замечание: только чтение.
4.2.10. ShareName
Замечание: только чтение.
4.2.11. TotalSize
Замечание: только чтение.
4.2.12. VolumeName
Замечание: чтение и запись.
5. Объект File
5.1. Создание объекта
5.2. Свойства
5.2.1. Attributes
Возвращаемое значение: число, набор флагов атрибутов файла. Флаги:
Замечание: чтение и запись или только чтение, в зависимости от атрибута.
Возвращаемое значение: дата создания файла.
Замечание: только чтение.
5.2.3. DateLastAccessed
Возвращаемое значение: дата последнего доступа к файлу.
Замечание: только чтение.
5.2.4. DateLastModified
Возвращаемое значение: дата последней модификации файла.
Замечание: только чтение.
5.2.5. Drive
Замечание: только чтение.
5.2.6. Name
Возвращаемое значение: имя файла.
Замечание: чтение и запись.
5.2.7. ParentFolder
Замечание: только чтение.
5.2.8. Path
Возвращаемое значение: полный путь к файлу.
Замечание: только чтение.
5.2.9. ShortName
Возвращаемое значение: короткое имя файла в формате 8.3.
Замечание: только чтение.
5.2.10. ShortPath
Возвращаемое значение: короткий путь к файлу в формате 8.3.
Замечание: только чтение.
5.2.11. Size
Возвращаемое значение: размер файла в байтах.
Замечание: только чтение.
5.2.12. Type
Возвращаемое значение: тип файла. Информация, похожая на ту, которую можно увидеть в палитре свойств файла в проводнике.
Замечание: только чтение.
5.3. Методы
5.3.1. Copy
Назначение: копирует файл в указанное место.
5.3.2. Move
Назначение: перемещает файл в указанное место.
5.3.3. Delete
Назначение: удаляет файл.
5.3.4. OpenAsTextStream
6. Объект Folder
6.1. Создание объекта
6.2. Свойства
6.2.1. Attributes
Возвращаемое значение: число, набор флагов атрибутов папки. Флаги:
Замечание: чтение и запись или только чтение, в зависимости от атрибута.
Возвращаемое значение: дата создания каталога.
Замечание: только чтение.
6.2.3. DateLastAccessed
Возвращаемое значение: дата последнего доступа к каталогу.
Замечание: только чтение.
6.2.4. DateLastModified
Возвращаемое значение: дата последней модификации каталога.
Замечание: только чтение.
6.2.5. Drive
Замечание: только чтение.
6.2.6. IsRootFolder
Возвращаемое значение: булево (число). Признак того, является ли каталог корневым.
Замечание: только чтение.
6.2.7. Name
Возвращаемое значение: имя каталога.
Замечание: чтение и запись.
6.2.8. ParentFolder
Замечание: только чтение.
6.2.9. Path
Возвращаемое значение: полный путь к каталогу.
Замечание: только чтение.
6.2.10. ShortName
Возвращаемое значение: короткое имя каталога в формате 8.3.
Замечание: только чтение.
6.2.11. ShortPath
Возвращаемое значение: короткий путь к каталогу в формате 8.3.
Замечание: только чтение.
6.2.12. Size
Возвращаемое значение: размер всех файлов и подкаталогов, входящих в данный каталог, в байтах.
Замечание: только чтение.
6.2.13. Type
Возвращаемое значение: тип каталога. Информация, похожая на ту, которую можно увидеть в палитре свойств каталога в проводнике.
Замечание: только чтение.
6.2.14. SubFolders
Замечание: только чтение.
Создание нового подкаталога:
6.2.15. Files
Замечание: только чтение.
6.3. Методы
6.3.1. Copy
Назначение: копирует каталог в указанное место.
6.3.2. Move
Назначение: перемещает каталог в указанное место.
6.3.3. Delete
Назначение: удаляет каталог со всем содержимым.
6.3.4. CreateTextFile
7. Объект TextStream
7.1. Создание объекта
7.2. Свойства
7.2.1. AtEndOfLine
Возвращаемое значение: содержит True, если указатель достиг конца строки и False в противном случае. Работает только если файл открыт для чтения.
Замечание: только чтение.
7.2.2. AtEndOfStream
Возвращаемое значение: содержит True, если указатель достиг конца файла и False в противном случае. Работает только если файл открыт для чтения.
Замечание: только чтение.
7.2.3. Column
Возвращаемое значение: содержит номер колонки текущего символа файла.
Замечание: только чтение.
7.2.4. Line
Возвращаемое значение: содержит номер текущей строки файла.
Замечание: только чтение.
7.3. Методы
7.3.1. Close
Назначение: закрывает открытый файл.
7.3.2. Read
Назначение: считывает из файла указанное количество символов и возвращает полученную строку.
7.3.3. ReadAll
Назначение: считывает весь файл и возвращает полученную строку.
Описание: для больших файлов использование этого метода потребует больших ресурсов памяти.
7.3.4. ReadLine
Назначение: считывает строку из файла и возвращает полученную строку.
7.3.5. Skip
Назначение: пропускает при чтении файла указанное количество символов.
7.3.6. SkipLine
Назначение: пропускает при чтении файла строку.
7.3.7. Write
Назначение: записывает в файл указанную строку. Символы возврата каретки и новой строки в файл не записываются.
7.3.8. WriteLine
Назначение: записывает в файл указанную строку. В файл записываются символы возврата каретки и новой строки.
7.3.9. WriteBlankLines
Назначение: записывает в файл указанное количество пустых строк (символы возврата каретки и новой строки).
Одной из важнейших составляющих любого языка программирования является способность считывать и записывать информацию из файлов. Стандартно это называется функциями низкого уровня (Low Level) и в полном объеме представлено в VBA. Кстати, именно эта особенность и является основой опасности макросов.
С другой стороны, в свете изучаемого курса, нельзя не отметить, что обсуждаемые возможности относятся далеко не к начальному уровню. Без них не удастся обойтись при автоматизации взаимодействия со сложной информацией из разнородных источников.
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
P.S.! Завершение переработки материалов разработчика приводит к совершенно неутешительным выводам. Материала по этой теме всегда было очень мало, да и качество оставляло желать лучшего. Теперь же он стал «обструганным» под непонятный стандарт, разорванным в несвязанное словоизвержение и напичканным примерами, половина из которых только запутывает ситуацию, а вторая — ничего не иллюстрирует. Ну, или почти так.
Работа с файлами, дисками и папками, путь
Логика изложения основана на том, что можно сделать с существующими объектами, а уже потом — как создать новый. Поскольку многие команды распространяются не только на работу с каталогами, но и на файлы, полное изложение приводится именно здесь.
Все, перечисленное здесь, не имеет прямого отношения к низкоуровневым функциям, но без этой информации работать нельзя в принципе.
Первым является вопрос о том, где мы сейчас находимся. Совсем неочевиден не только ответ, но и то, что сам вопрос будет своевременно задан. Данный тезис становится все более актуальным с каждым годом и мне не хотелось бы, чтобы мои ученики бились об него лбом.
CurDir
Определение текущей папки.
Из синтаксиса можно понять (или нет) достаточно многое.
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
Перечисленное не дает однозначного ответа на возникающие вопросы, но является основой для таковых. Частичные решения есть в разделе Примеры.
ChDrive
Инструкция для смены текущего диска (ChDrive) работает довольно примитивно. Так, вариант
определит текущим диском диск «D:». Из примера видно, что приводится только литерал, без двоеточия.
ChDir
Изменяет текущий каталог или текущую папку
Внимание! Изменяется текущая папка на указываемом диске, а не сам диск. Для смены диска потребуется команда ChDrive.
В значении пути можно использовать обозначения относительного перемещения. Например,
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
Функция возвращает строку (String) с именем обнаруженных на диске файла, папки или подпапки. Если объект файловой системы обнаружен не будет, возвратится пустая строка.
В имени можно использовать знаки подстановки маски файла (* и ?).
Передача в качестве аргумента пустой строки возвращает список всех файлов и папок.
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
Атрибуты (копия из справки)
Константа | Значение | Описание |
vbNormal | 0 | Файлы без атрибутов (Значение по умолчанию.) |
vbReadOnly | 1 | В дополнение к файлам без атрибутов определяет файлы, доступные только для чтения |
vbHidden | 2 | В дополнение к файлам без атрибутов определяет скрытые файлы |
vbSystem | 4 | В дополнение к файлам без атрибутов определяет системные файлы |
vbVolume | 8 | Определяет метку тома, то есть имя логического диска (не букву!). Если указан какой-либо другой атрибут, параметр vbVolume игнорируется |
vbDirectory | 16 | В дополнение к файлам без атрибутов определяет каталоги (папки) |
Из контекста описания понятно, что атрибуты могут суммироваться.
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
Оператор Name переименовывает файл или папку и/или перемещает их в новое место.
Name <oldpathname> As <newpathname>
- Обрабатываются только уже существующие объекты.
- Файл может быть перемещен на другой диск.
- Файлы, открытые низкоуровневыми процедурами, надо предварительно закрыть.
- Перемещение папок и подпапок возможно только в пределах логического диска.
MkDir
Создает новый каталог или папку.
Если диск не указан, новые каталог или папка создаются на текущем диске. Имя присваивается с учетом регистра символов.
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
RmDir
Удаляет существующую директорию или папку.
Невозможно удалить папку, содержащую файлы, так что следует вначале удалить их, используя команду Kill. Также этой командой нельзя удалить файл.
Удаляет файлы с диска.
В качестве пути указывается строка, содержащая имя одного или нескольких файлов, предполагаемых к удалению. Строка может содержать любой фрагмент пути, начиная от логического диска, то есть относительный или абсолютный.
В имени можно использовать знаки подстановки маски файла (* и ?).
Так как команда удаляет только файлы, для удаления папок следует воспользоваться командой RmDir.
SetAttr
Устанавливает атрибуты файла.
SetAttr <имя файла>, <атрибуты>
Оба параметра являются обязательными. Имя файла может содержать путь.
Нельзя изменять атрибуты у открытых файлов!
Атрибуты:
Константа | Значение | Описание |
vbNormal | 0 | Без атрибутов (по умолчанию) |
vbReadOnly | 1 | Только для чтения (Read-only) |
vbHidden | 2 | Скрытый файл (Hidden) |
vbSystem | 4 | Системный файл (System) |
vbArchive | 32 | Файл изменен после последнего резервного копирования |
Атрибуты при указании могут суммироваться.
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
Низкоуровневые функции
Рассуждая здраво, практически невозможно сформировать однозначную последовательность изложения, так как тогда мы упремся в проблему яйца и курицы. Даже понимание того, что прежде чем считывать файл, он должен быть создан не очень помогает: чтение выполняется намного чаще.
Идентификатор файла
Его должен задать программист, но делать это вручную допустимо только для простых ситуаций. Лучше воспользоваться следующей функцией
где RangeNumber — 0 (1–255) или 2 (256–511).
Простейший вариант обращения (запроса) к функции выглядит так:
Далее по тексту будет использоваться именно выделенная красным переменная, содержащая получаемый ID (для упрощения записи). Если не будет заявлено другое или использовано явное указание.
Открывает файл для операций ввода/вывода (input/output, I/O).
Если указываемый на запись файл отсутствует, то он будет создан. Естественно, попытка чтения несуществующего файла закончится ошибкой (см. Dir).
Описание команды упрощено!
После завершения работы файл должен быть закрыт. Иначе какой-либо доступ к нему может быть заблокирован (в примитивном понимании и без дополнительного обсуждения). Для этого используется следующая команда:
В качестве параметра передается номер файла, номера файлов через запятую или ничего. В последнем случае закроются все открытые файлы.
Reset
Закрывает все файлы, открытые с помощью оператора Open, записывая содержимое их буферов на диск.
По существу, дублирует команду Close без атрибутов.
Чтение и запись
- Последовательный (Sequential) доступ (режимы Input, Output и Append) используется для записи в текстовые файлы, например, журналы ошибок и отчеты.
- Прямой или произвольный доступ (Random) используется для считывания и записи данных в файле без его закрытия. Файлы с прямым доступом сохраняются данные в записях, что ускоряет нахождение требуемой информации.
- Двоичный доступ (режим Binary) используется для считывания или записи любого байта в файле, например, при сохранении или отображении растрового рисунка.
Записывает данные в последовательный файл в структурированном виде.
Необязательный параметр OutputList представляет одно или несколько числовых, или строковых выражений через запятую, которые нужно записать в файл. В переводе на обыденный язык, каждая строка подобного результирующего файла является перечнем значений с разделителем, каждое из которых записано по строгим правилам. Фактически мы получаем известный большинству CSV-файл. Чтобы не возникало неожиданностей при считывании, следует очень четко придерживаться правил.
Отсутствие OutputList (запятая в команде остается!) приводит к записи пустой строки.
В подобном файле крайне удобно хранить настройки для работы проекта, которые пользователь может изменить в соответствии со своими потребностями. Для передачи подобных макросов на сторону следует предусматривать (встраивать) возможности восстановления файлов, если пользователь их удалит или отредактирует вручную.
С другой стороны, набор множества таких строк представляет собой своего рода таблицу базы данных.
Записывает отформатированные данные в последовательный файл.
OutputList — выражение или список выражений, которые необходимо вывести.
Его синтаксис
С учетом специфического применения оператора, детали его действия опущены.
Параметр n указывает, сколько пробелов будет возвращено. При переполнении строки, излишек переходит на следующую.
Если не умничать, то функция будет работать только с моноширинным шрифтом.
Вставляет табулятор. Если параметр не указан, печать смещается к следующей позиции (шаг равен 14 символам). Наличие параметра перемещает к позиции с указанным номером. А если она уже была, то на эту позицию, но следующей строки.
Если значение width равно 0, длина строки является неограниченной. Оно используется по умолчанию.
Читает строку со структурированными данными из открытого последовательного файла и сохраняет эти данные в переменных.
Параметр VarList представляет собой перечисленный список переменных, в которые сохраняются считываемые данные.
Считывает одну строку из открытого последовательного файла и присваивает ее переменной типа String или Variant.
Оператор следует отнести к самому востребованному варианту считывания данных из файла. Считанная строка может быть подвергнута любой обработке.
Считывает данные из открытого файла на диске в переменную.
Необязательный параметр RecNumber типа Variant (Long) указывает на номер записи (для файлов, открытых в режиме Random) или байтовое число (для файлов, открытых в режиме Binary), с которого начинается считывание. При его отсутствии, запятая сохраняется Результат сохраняется в переменную VarName.
Записывает данные из переменной в файл на диске.
- Параметр Len, задаваемый при открытии файла, играет ключевую роль. Во-первых, длина записи не может его превышать. Во-вторых, если запись меньше, то она дополняется пробелами до размера Len.
- Если записываемая переменная является строкой переменной длины, оператор Put записывает 2-байтовый дескриптор c длиной строки, а затем переменную. То есть длина записи, указанная предложением Len в операторе Open, должна быть по крайней мере на 2 больше, чем фактическая длина строки записываемых данных.
- Если записываемая переменная имеет числовой подтип Variant, оператор Put записывает дополнительно 2 байта, указывающие на тип. См. п.2.
- Если записываемая переменная имеет строковый подтип Variant, оператор Put записывает дополнительно 2 байта, указывающие на тип и еще 2 — на длину. Соответственно, значение Len должно быть увеличено на 4.
- Если записываемая переменная является динамическим массивом пользовательского типа, Put записывает дескриптор, длина которого равна 2 плюс в 8 раз больше числа измерений, то есть 2 + 8 * число измерений. То есть, для одномерного массива — 10 (2+8*1), для двумерного — 18 (2+8*2) и т.д. Плюс размер массива, описать который нормально сотрудники Microsoft не удосужились.
- Если записываемая переменная является массивом фиксированного размера, оператор Put записывает только данные, без дескриптора.
- При любом другом типе переменной все также, как и в п.6.
- Параметр Len, задаваемый при открытии, не действует. Значения переменных записываются последовательно, без заполнителя.
- Для любого другого массива, чем массив типа, определяемого пользователем, оператор Put записывает только данные, без дескриптора.
- Оператор Put записывает строки переменной длины, не являющиеся элементами типов, определяемых пользователем, с числом байтов равных числу знаков в строке.
Параметр position указывает начальную точку чтения и должен располагаться в диапазоне 1—2 147 483 647.
По существу, оператор назван неудачно, так как ничего не ищет, а просто перемещается по команде.
Примеры
Здесь не стоит разговаривать о микроскопических программах, хотя из приводимых примеров можно извлекать блоки и использовать их в качестве заготовок.
Также не будет полноценных примеров для бездумного копирования.
Многие ситуации содержат схожие требования, но идеальное решение должно состоять из множества функций. Сейчас их делать не очень хочется, но это запланировано в перспективе.
В любом случае, все примеры полностью работоспособны.
Принципиально важен факт документирования функции с точки зрения возвращаемых значений. Равно как и описание передаваемых параметров.
- Путь должен содержать литерал диска (C. ).
- Путь не должен заканчиваться косой чертой: «C:\a\b».
- Если путь и файл передаются отдельно, то имя файла не должно содержать пути.
- Все параметры являются обязательными и не могут быть пустыми. Последнее обстоятельство не проверяется.
Создание файла
Данное действие специально вынесено в отдельный заголовок, так как будет базовым для примеров, когда файла ещё нет. Оно имеет множество особенностей, включая фатальные для хранящейся информации.
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
Ещё один момент. Добавим программу (фрагмент), которая будет запускать процесс.
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
Проверка существования файла
Имеет прикладное назначение не только в случае использования низкоуровневых функций. По существу, нужно в любом программном проекте в качестве условия его запуска.
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
Запись информации в новый файл
Разумеется, что в этой ситуации файл нужно не открыть, а создать.
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
Добавление информации в существующий файл
Казалось бы. Но первым действием должна быть проверка его наличия, если это не было сделано в программе ранее.
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
Построчное считывание файла
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
Назначение текущей папки
Если работа с проектами так или иначе связана с файлами, хранящимися в одной папке, самым простым вариантом будет назначение ее текущей.
Представленный пример имеет формат глобальной функции (доступной для любого проекта), производящей множество проверок.
Доступ к размещенным в этом месте материалам ограничен и предоставляется следующим категориям:
1. Студент I/II курса ВХК РАН. 2. Бывший студент ВХК РАН. 3. Подготовка к ОГЭ. 4. Подготовка к ЕГЭ. 5. VIP-пользователь. 6. Благотворитель.
В принципе, возможна как оптимизация программы, так и ее модернизация или приспособление для других нужд.
Никакая часть сайта не может быть воспроизведена никаким способом без письменного разрешения правообладателя и явной ссылки на данный ресурс.
- Номер_файла – обязательный параметр, представляющий из себя номер, присвоенный файлу при открытии с помощью оператора Open.
- Переменные – обязательный параметр, представляющий из себя список переменных, разделенных запятой, которым присваиваются значения, считанные из файла.
- Номер_файла – обязательный параметр, представляющий из себя номер, присвоенный файлу при открытии с помощью оператора Open.
- Переменная – обязательный параметр, представляющий из себя имя переменной, объявленной как String или Variant, которой присваивается строка, считанная из файла.
- Номер_файла – обязательный параметр, представляющий из себя номер, присвоенный файлу при открытии с помощью оператора Open.
- Данные – необязательный параметр, представляющий из себя одно или несколько числовых или строковых выражений, разделенных запятой, которые нужно записать в файл.
Функция EOF
Функция EOF возвращает логическое значение True, когда достигнут конец файла, открытого для последовательного (Input) или произвольного (Random) доступа.Синтаксис функции EOF:
Номер_файла – это номер, присвоенный файлу при открытии с помощью оператора Open.
Функция EOF используется для предупреждения ошибок, вызываемых попытками выполнить чтение после конца файла. Она возвращает значение False, пока не будет достигнут конец файла.
Примеры чтения и записи в файл
Пример 1
Открытие (или создание, если он не существует) текстового файла для чтения и записи и запись в него одной строки, состоящей из двух текстовых и одного числового значений. Файл с именем myFile1.txt будет создан в той же папке, где расположен файл Excel с кодом VBA.
Пример 2
Открытие (или создание, если он не существует) файла без расширения для чтения и записи и запись в него трех строк: двух текстовых и одной в числовом формате. Файл с именем myFile2 будет создан в той же папке, где расположен файл Excel с кодом VBA.
Пример 3
Считываем строку, разделенную на отдельные элементы, из файла myFile1.txt и записываем в три переменные, по типу данных соответствующие элементам.
Пример 4
Считываем поочередно три строки из файла myFile2 и записываем в три элемента массива, объявленного как Variant, так как в этот файл ранее были записаны две строки с текстом и одна с числом.
Читайте также: