Для создания, чтения и редактирования DBF файла используется специальный API-интерфейс который создает специальный дескриптор дающий доступ к файлу .dbf.
Для того чтобы установить эту UDF необходимо положить файл DBF.au3 в папку C:\Program Files (x86)\AutoIt3\Include. Файл DBF.dll должен находится в папке где лежит файл скрипта .au3.
Пример:
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 |
#include <Array.au3> #include <Date.au3> #include "DBF.au3" Global $hDBF = _DBF_Create("RRL_PRIEM.DBF") If $hDBF = 0 Then ConsoleWrite("Error creating dbf file ..." & @CRLF) Exit EndIf _DBF_AddField($hDBF, "KOD", $DBF_FTInteger, 3, 0) For $i = 1 To 10 _WriteValues($hDBF) Next Global $aDBF = _DBF_DBFToArray($hDBF) _ArrayDisplay($aDBF) _DBF_Close($hDBF) Func _WriteValues($hDBF) $iRecords = _DBF_GetRecordCount($hDBF) _DBF_WriteIntegerAttribute($hDBF, $iRecords, 0, $iRecords + 1) EndFunc |
Вот основные процедуры этой библиотеки:
- _DBF_Open ()
- _DBF_Create()
- _DBF_Close()
- _DBF_AddField()
- _DBF_DBFToArray()
- _DBF_GetFieldInfo()
- _DBF_GetRecordCount()
- _DBF_GetFieldIndex()
- _DBF_GetFieldInfo()
- _DBF_ReadIntegerAttribute()
- _DBF_ReadDoubleAttribute()
- _DBF_ReadStringAttribute()
- _DBF_IsAttributeNULL()
- _DBF_WriteIntegerAttribute()
- _DBF_WriteDoubleAttribute()
- _DBF_WriteStringAttribute()
- _DBF_WriteNULLAttribute()
- _DBF_IsRecordDeleted()
- _DBF_MarkRecordDeleted()
- _DBF_GetNativeFieldType()
_DBF_Open ()
_DBF_Open($sFileName, [ $sMode= False ])
Параметры:
sFileName | Имя файла xBase (.dbf) для доступа. |
sMode | [необязательный]Строка доступа стиля fopen (). В это время только «rb» (только для чтения) и «rb +» (двоичный код чтения / записи) должен быть использован. |
Функция _DBF_Open() должна использоваться для установления доступа к существующему файлу таблицы формата xBase. Возвращенный DBFHandle передается другим функциям доступа, и DBFClose () следует вызывать для восстановления ресурсов и при необходимости сбрасывать изменения на диск. Функция _DBF_Create() должна вызывать для создания новых файлов xBase. Для удобства _DBF_Open() можно вызвать с именем файла .shp или .shx, и он будет определять имя связанного файла .dbf.
Пример:
1 2 3 4 5 6 7 8 9 10 |
#include "DBF.au3" $sDBF = FileOpenDialog("Выберите DBF файл", @ScriptDir, "dBase DBF (*.dbf)", 3) If @error Then Exit Global $hDBF = _DBF_Open($sDBF) If $hDBF = 0 Then ConsoleWrite("Ошибка открытия dbf файла..." & @CRLF) Exit EndIf |
_DBF_Create()
_DBF_Create($sFileName);
Параметры:
sFileName | Имя создаваемого файла xBase (.dbf) |
Функция _DBF_Create() создает новый файл формата xBase с заданным именем и возвращает дескриптор доступа, который можно использовать с другими функциями DBF. У вновь созданного файла не будет полей и нет записей. Поля должны быть добавлены с помощью _DBF_AddField() перед записью любых записей.
Пример:
1 2 3 4 5 6 7 |
#include "DBF.au3" Global $hDBF = _DBF_Create("Test.dbf") If $hDBF = 0 Then ConsoleWrite("Ошибка создания dbf файла..." & @CRLF) Exit EndIf |
_DBF_Close()
_DBF_Close($hDBF);
hDBF | дескриптор доступа для закрываемого файла. |
Функция _DBF_Close() закроет указанный файл xBase (открывается с помощью _DBF_Open() или _DBF_Create()), выгружает всю информацию в файл на диске и восстанавливает любые ресурсы, связанные с открытием файла. После вызова _DBF_Close() дескриптор файла (hDBF) не следует использовать снова с API DBF.
Пример:
1 2 3 4 5 6 7 8 9 |
#include "DBF.au3" Global $hDBF = _DBF_Create("Test.dbf") If $hDBF = 0 Then ConsoleWrite("Ошибка создания dbf файла..." & @CRLF) Exit EndIf _DBF_Close($hDBF) |
_DBF_AddField()
_DBF_AddField($hDBF, $sFieldName, $iFieldType, $iWidth, $iDecimals);
hDBF | дескриптор доступа для запрашиваемого файла, возвращаемый _DBF_Open() или _DBF_Create(). |
sFieldName | имя нового поля. Будет использовано не более 11 символов. Чтобы использовать файл xBase в некоторых пакетах, он может быть необходимо избегать некоторых специальных символов в именах полей таких как пробелы или арифметические операторы. |
iFieldType | один из FTString, FTInteger или FTDouble, чтобы установить тип нового поля. Обратите внимание, что некоторое действительное поле xBase типы не могут быть созданы, например, поля даты. |
iWidth | ширина создаваемого поля. Для полей FTString это устанавливает максимальную длину строки, которая может быть сохранена. Для FTInteger это устанавливает количество цифр наибольшее число, которое может быть представленным. Для полей FTDouble это в комбинации с значением nDecimals установите размер и точность созданного поля. |
iDecimals | количество десятичных знаков для резервирования полей FTDouble. Для всех других типов полей это должно быть равно нулю. Например с nWidth = 7, и nDecimals = 3 числа будут отформатированы аналогично «123.456». |
Функция _DBF_AddField() используется для добавления новых полей в существующий файл xBase, открытый с помощью _DBF_Open() или созданный с помощью _DBF_Create().
Возвращаемое значение _DBF_AddField() — это номер поля нового поля, или -1, если сложение поля не удалось.
_DBF_DBFToArray()
_DBF_DBFToArray($sFileName);
Параметры:
hDBF | дескриптор доступа для преобразования его в массив. |
Функция _DBF_DBFToArray() преобразует указанный файл xBase (открывается с помощью _DBF_Open() или _DBF_Create()) в массив.
Пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#include "DBF.au3" Global $hDBF = _DBF_Create("Test.dbf") If $hDBF = 0 Then ConsoleWrite("Ошибка создания dbf файла ..." & @CRLF) Exit EndIf _DBF_AddField($hDBF, "ID", $DBF_FTInteger, 3, 0) _DBF_AddField($hDBF, "Time", $DBF_FTString, 23, 0) _DBF_AddField($hDBF, "Value1", $DBF_FTDouble, 10, 3) _DBF_AddField($hDBF, "Value2", $DBF_FTDouble, 10, 3) _DBF_AddField($hDBF, "Value3", $DBF_FTDouble, 10, 3) _DBF_AddField($hDBF, "Value4", $DBF_FTDouble, 10, 3) Global $aDBF = _DBF_DBFToArray($hDBF) _ArrayDisplay($aDBF) _DBF_Close($hDBF) |
_DBF_GetFieldInfo()
_DBF_GetFieldInfo($hDBF, $iField);
Параметры:
hDBF: | дескриптор доступа для запрашиваемого файла, который возвращается по _DBF_Open() или _DBF_Create(). |
Функция _DBF_GetFieldInfo() возвращает количество полей, определенных в настоящее время для указанного файла xBase.
_DBF_GetRecordCount()
_DBF_GetRecordCount($hDBF);
Параметры:
hDBF | дескриптор доступа для запрашиваемого файла, возвращаемый _DBF_Open() или _DBF_Create(). |
Функция _DBF_GetRecordCount() возвращает количество записей, существующих в файле xBase. Обратите внимание, что с файлами формы для каждой фигуры в файлах .shp / .shx существует одна запись xBase.
_DBF_GetFieldIndex()
_DBF_GetFieldIndex($hDBF, $sFieldName);
Параметры:
hDBF | дескриптор доступа для запрашиваемого файла, возвращаемый _DBF_Open() или _DBF_Create(). |
sFieldName | имя поля для поиска. |
Возвращает индекс поля, соответствующего этому имени, или -1 при ошибке. Сравнение нечувствительно к регистру. Однако длины должны точно совпадать.
_DBF_GetFieldInfo()
_DBF_GetFieldInfo($hDBF, $iField);
Параметры:
hDBF | дескриптор доступа для запрашиваемого файла, возвращаемый _DBF_Open() или _DBF_Create(). |
iField | поле для запроса. Это должно быть число между 0 и n-1, где n — числовые поля в файле, так как возвращается DBFGetFieldCount (). |
_DBF_GetFieldInfo() возвращает тип запрашиваемого поля, которое является одним из перечисляемых значений DBFFieldType. Кроме того, имя поля и информация о ширине поля могут быть возвращены. Возвращаемый тип поля не соответствует одному полю с типами полей xBase. Например, тип поля xBase для Date будет просто возвращен как FTInteger.
typedef enum {
FTString, / * поле строки фиксированной длины * /
FTInteger, / * числовое поле без десятичных знаков * /
FTDouble, / * числовое поле с десятичными знаками * /
FTLogical, / * логическое поле. * /
FTInvalid / * не распознанный тип поля * /
} DBFFieldType;
_DBF_ReadIntegerAttribute()
_DBF_ReadIntegerAttribute ($hDBF, $iRecord, $iField);
hDBF | дескриптор доступа для запрашиваемого файла, возвращаемый _DBF_Open() или _DBF_Create(). |
iRecord | номер записи (номер формы), из которой значение поля следует читать. |
iField | поле внутри выбранной записи, которое должно быть прочитано. |
_DBF_ReadIntegerAttribute () будет считывать значение одного поля и возвращать его как целое. Это можно использовать даже с полями FTString, хотя возвращаемое значение будет равно нулю, если не будет интерпретироваться как число.
_DBF_ReadDoubleAttribute()
_DBF_ReadDoubleAttribute($hDBF, $iRecord, $iField);
hDBF | дескриптор доступа для запрашиваемого файла, возвращаемый _DBF_Open() или _DBF_Create(). |
iRecord | номер записи (номер формы), из которой значение поля следует читать. |
iField | поле внутри выбранной записи, которое должно быть прочитано. |
_DBF_ReadDoubleAttribute() будет считывать значение одного поля и возвращать его как double. Это можно использовать даже с полями FTString, хотя возвращаемое значение будет равно нулю, если не будет интерпретироваться как число.
_DBF_ReadStringAttribute()
_DBF_ReadStringAttribute($hDBF, $iRecord, $iField);
hDBF | дескриптор доступа для запрашиваемого файла, возвращаемый _DBF_Open() или _DBF_Create(). |
iRecord | номер записи (номер формы), из которой значение поля следует читать. |
iField | поле внутри выбранной записи, которое должно быть прочитано. |
DBFReadStringAttribute () будет считывать значение одного поля и возвращать его в виде строки. Эта функция может использоваться для любого типа поля (включая FTInteger и FTDouble) и вернет строковое представление, хранящееся в файле .dbf. Возвращаемый указатель относится к внутреннему буферу, который действителен только до следующего вызова функции DBF. Содержимое может быть скопировано с помощью обычных строковых функций, таких как strcpy () или strdup (). Если макрос TRIM_DBF_WHITESPACE определен в shapefil.h (по умолчанию), тогда все символы верхнего и конечного пробелов (ASCII 32) будут удалены до того, как будет возвращена строка.
_DBF_IsAttributeNULL()
_DBF_IsAttributeNULL($hDBF, $iRecord, $iField);
hDBF | дескриптор доступа для запрашиваемого файла, возвращаемый _DBF_Open() или _DBF_Create(). |
iRecord | номер записи (номер формы), из которой значение поля следует читать. |
iField | поле внутри выбранной записи, которое должно быть прочитано. |
Эта функция вернет TRUE, если указанное поле равно NULL, иначе FALSE. Обратите внимание, что поля NULL представлены в файле .dbf как имеющие все пробелы в поле. Чтение полей NULL приведет к значению 0.0 или пустой строке с другими функциями DBFRead * Attribute ().
_DBF_WriteIntegerAttribute()
_DBF_WriteIntegerAttribute($hDBF, $iRecord, $iField, $nValue);
hDBF | дескриптор доступа для запрашиваемого файла, возвращаемый _DBF_Open() или _DBF_Create(). |
iRecord | номер записи (номер формы), из которой значение поля следует читать. |
iField | поле внутри выбранной записи, которое должно быть записано |
nValue | целочисленное значение, которое должно быть записано. |
Функция _DBF_WriteIntegerAttribute() используется для записи значения в числовое поле (FTInteger или FTDouble). Если запись будет выполнена, значение TRUE будет возвращено, иначе будет возвращена FALSE. Если значение слишком велико для установки в поле, оно будет усечено, а FALSE вернется.
_DBF_WriteDoubleAttribute()
_DBF_WriteDoubleAttribute($hDBF, $iRecord, $iField, $nValue);
hDBF | дескриптор доступа для запрашиваемого файла, возвращаемый _DBF_Open() или _DBF_Create(). |
iRecord | номер записи (номер формы), из которой значение поля следует читать. |
iField | поле внутри выбранной записи, которое должно быть записано. |
nValue | значение с плавающей запятой, которое должно быть записано. |
Функция _DBF_WriteDoubleAttribute() используется для записи значения в числовое поле (FTInteger или FTDouble). Если запись будет выполнена, значение TRUE будет возвращено, иначе будет возвращена FALSE. Если значение слишком велико для установки в поле, оно будет усечено, а FALSE вернется.
_DBF_WriteStringAttribute()
_DBF_WriteStringAttribute($hDBF, $iRecord, $iField, $nValue);
hDBF | дескриптор доступа для запрашиваемого файла, возвращаемый _DBF_Open() или _DBF_Create(). |
iRecord | номер записи (номер формы), из которой значение поля следует читать. |
iField | поле внутри выбранной записи, которое должно быть записано. |
nValue | строка, которая будет записана в поле. |
Функция _DBF_WriteStringAttribute() используется для записи значения в поле строки (FString). Если запись преуспеет, значение TRUE будет возвращено, в противном случае возвращается FALSE. Если значение слишком велико для установки в поле, оно будет усечено, а FALSE вернется.
Пример:
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 |
#include <Array.au3> #include <Date.au3> #include "DBF.au3" Global $hDBF = _DBF_Create("Test.dbf") If $hDBF = 0 Then ConsoleWrite("Error creating dbf file ..." & @CRLF) Exit EndIf _DBF_AddField($hDBF, "ID", $DBF_FTInteger, 3, 0) _DBF_AddField($hDBF, "Time", $DBF_FTString, 23, 0) _DBF_AddField($hDBF, "Value1", $DBF_FTDouble, 10, 3) _DBF_AddField($hDBF, "Value2", $DBF_FTDouble, 10, 3) _DBF_AddField($hDBF, "Value3", $DBF_FTDouble, 10, 3) _DBF_AddField($hDBF, "Value4", $DBF_FTDouble, 10, 3) For $i = 1 To 100 _WriteValues($hDBF) Next Global $aDBF = _DBF_DBFToArray($hDBF) _ArrayDisplay($aDBF) _DBF_Close($hDBF) Func _WriteValues($hDBF) $iRecords = _DBF_GetRecordCount($hDBF) _DBF_WriteIntegerAttribute($hDBF, $iRecords, 0, $iRecords + 1) _DBF_WriteStringAttribute($hDBF, $iRecords, 1, _Now() & "." & @MSEC) _DBF_WriteDoubleAttribute($hDBF, $iRecords, 2, Random(1, 100)) _DBF_WriteDoubleAttribute($hDBF, $iRecords, 3, Random(1, 100)) _DBF_WriteDoubleAttribute($hDBF, $iRecords, 4, Random(1, 100)) _DBF_WriteDoubleAttribute($hDBF, $iRecords, 5, Random(1, 100)) EndFunc |
_DBF_WriteNULLAttribute()
_DBF_WriteNULLAttribute($hDBF, $iRecord, $iField);
hDBF | дескриптор доступа для запрашиваемого файла, возвращаемый _DBF_Open() или _DBF_Create(). |
iRecord | номер записи (номер формы), из которой значение поля следует читать. |
iField | поле внутри выбранной записи, которое должно быть записано. |
Функция _DBF_WriteNULLAttribute() используется для очистки указанного поля до значения NULL. В .dbf-файле это представлено путем установки всего поля в пробелы. Если запись преуспеет, значение TRUE будет возвращено, в противном случае возвращается FALSE.
_DBF_IsRecordDeleted()
_DBF_IsRecordDeleted($hDBF, $iRecord);
hDBF | дескриптор доступа для проверяемого файла. |
iRecord | индекс записи для проверки. |
Возвращает TRUE (отличное от нуля), если запись помечена для удаления, иначе она возвращает FALSE.
_DBF_MarkRecordDeleted()
_DBF_MarkRecordDeleted($hDBF, $iRecord, $iDeleted);
hDBF | дескриптор доступа для файла. |
iRecord | индекс записи для обновления. |
iDeleted | ИСТИНА, чтобы пометить запись, или FALSE, чтобы восстановить ее. |
Возвращает TRUE при успешном выполнении или FALSE при ошибке.
_DBF_GetNativeFieldType()
_DBF_GetNativeFieldType($hDBF, $iField);
hDBF | дескриптор доступа для файла. |
iField | индекс поля для запроса. |
Эта функция возвращает код типа DBF указанного поля. Это будет один из:
- ‘C’ (String)
- ‘D’ (Дата)
- ‘F’ (Float)
- ‘N’ (числовое, с десятичным или без него)
- ‘L’ (логический)
- ‘M’ (памятка: 10 цифр. DBB block ptr)
- » (поле за пределами допустимого диапазона)