В 8 и 9 статьях я показал, как перенести данные из dbf файла в текстовый файл и обратно. Конечно работа с текстовыми файлами это не с dbf и EXCEL. В текстовом файле можно делать и поиск дубликатов, и сортировку, а если данные упорядочены и разделены явным символом разделителем и еще легче. Вопрос, стоит ли этим заниматься. Я могу еще, как то представить базы данных на текстовых файлах, но какие необходимы возможности, чтобы их сопровождать. В основном все привыкли думать, что базы данных это отдельные СУБД или определенные приложения. Да, в этом все так, но вводить данные можно и в текстовые файлы и также можно создавать некоторое количество файлов и по определенному ключу их сопоставлять. Конечно, EXCEL это книга и там можно и сортировать и делать фильтры и как в базу завязать почти все листы а если не хватит, то добавить можно другую книгу. Также это можно сделать и в ГУГЛ таблицах. Здесь понятие автоматизации можно записать на VB, VBS и JS и этим доказывать, что создали базу данных. А если Вы создали формы ввода в ЯНДЕКС и ГУГЛ на Яндекс диске и Гугл диске в облаке тем более можете похвастаться, что создали базы данных на основе этих форм, не прибегая к полноценной и профессиональной СУБД. А потом делать статистику и думать, что удобнее всех удобных надобностей и гордиться этим. Там все приспособлено. Есть и формулы и различные условия под это. Только живи, работай и не зевай. Книг написано можно, так выразиться уйма. Примеров в ИНТЕРНЕТе еще больше. Текстовые, а что текстовые файлы. Под них надо писать мощный аппарат взаимодействия и нужно ли это. Да есть приложения, которые могут отыскать в текстовых файлах дубли. Можно сделать и физическую сортировку текстового файла, но индексную возможно то же можно сделать, но я лично это не встречал. В СУБД на dbf или в ACCESS можно сделать как индексную сортировку и физическую сортировку данных, так там это введено, и надо просто это грамотно сделать. В текстовых файлах нет возможности делать SQL запросы и другие операции с отбором информации, хотя это можно продумать, но не всегда очевидно. Текстовые возможности были до СУБД, и на основе всего этого пришлось их создать. Я делал поиск в текстовых файлах дублей и сортировку. Там есть свои особенности. Все зависит от мощности файлов и длины текстовых строк. Приходилось в некоторых случаях создавать лишнее как бы поле, а при сортировке еще и иногда другой файл, куда записывались отсортированные данные. Все это не быстро, но на VBScript это тоже можно сделать. Писать формы под такие файлы то же неудобно, но возможно. Наверно есть еще фанаты и энтузиасты этого направления, но это все сугубо индивидуально. И сопоставлять все это совместно не стоит, если есть EXCEL или решение на СУБД. Поэтому надо просто понять, что если у Вас есть базы данных dbf или EXCEL или ACCESS, то оттуда можно перенести данные в текстовый файл для удобства пользователей в удобном восприятии информации. Также можно поиграть данными и записать их обратно. Если EXCEL является книгой из листов, то ACCESS книга, куда можно перегнать файлы как dbf (до 13 версии Office) так EXCEL и текстовые. Но я просто указал, как воспринимать переводы данных из текстовых файлов в dbf и обратно. Это удобней иногда сделать на VBScript от ODBC, тем более, если не установлен office, и ВЫ больше ничего не знали и никогда до этого, как это сделать. Здесь еще можно поговорить об ACCESS, где есть возможность подсоединять текстовые файлы. Работать с ними, а если надоест, то и преобразовывать в свои базы. И это отличное решение Microsoft, я имею в виду ACCESS, которая позволила создать братство форматов и обмениваться между собой данными. Можно перенести данные из dbf в текстовые файлы, а эти файлы подсоединить в ACCESS, а потом продумать их преобразование в свои локальные базы или в другие форматы. Чем не решение к переводу данных из dbf. Там же можете попытаться создать базы данных на основе текстовых файлов, если Вам это захочется. Microsoft улучшает ODBC и развивает это направление дальше. Так же будет развивать VBScript и JScript. Поэтому если Вы имеете понятие текстовых файлов, то можете запомнить что данные из них можно перенести в файлы СУБД и обратно. Но сейчас мы переключаемся на тему согласно заголовку, а именно перенос данных dbf файла в EXCEL файл или файлы. Если в предыдущих статьях Я показал, как перенести данные из EXCEL в dbf и из текстового файла в dbf и обратно, то в этой статье отмечу, как перенести данные из dbf в EXCEL. В принципе кто внимательно читал статьи с 1 по 6, смогут это понять и даже осуществить. Принцип переноса такой же, как из EXCEL в dbf. Есть маленькое отличие, и я это в нижеприведенном листинге покажу. Возникает только вопрос, а надо ли это делать. Ведь любая EXCEL среда легко воспринимает dbf формат, и нет проблем его подсоединения. Но это когда у Вас нет office или другого приложения, которое это может продемонстрировать. В отличие от переноса данных из EXCEL в dbf, скорость переноса данных больших dbf в EXCEL очень долгая и по времени нудная. Работа с такими dbf файлами на VBScript тем самым не совсем удобна, но делать это можно. Можете этот процесс попробовать, если захотите поэкспериментировать в этом направлении.
Листинг VBScript
'*******************************************************************
' Имя: AdoED10A.vbs
' Язык: VBScript
' Описание: Вывод данных из DBF файла в XLS или XLSX
' Полностью ODBC для dBase и EXCEL, ADO
'*******************************************************************
On Error Resume Next 'Проверка ошибок
Set WshShell=WScript.CreateObject("WScript.Shell")
SDefaultDir=WshShell.CurrentDirectory
Set FSO = CreateObject("Scripting.FileSystemObject")
FileTxt=SDefaultDir & "\_FileErr.txt" 'Файл ошибки
NameFil=SDefaultDir & "\_222.xls"
NameFilDBF=SDefaultDir & "\_111.dbf"
'========== Проверка файла
If FSO.FileExists(NameFilDBF) Then
else
MsgBox "Нет файла "&NameFilDBF
WScript.Quit
end if
'========== Проверка файла
'=========== Проверка файла
Set FSO = CreateObject("Scripting.FileSystemObject")
If FSO.FileExists(NameFil) Then
'MsgBox "Файл есть! Удаляем"
FSO.DeleteFile NameFil
End if
'========== Проверка файла
'=========== Проверка файла TXT
Set FSO = CreateObject("Scripting.FileSystemObject")
If FSO.FileExists(FileTxt) Then
'MsgBox "Файл есть! Удаляем"
FSO.DeleteFile FileTxt
End if
'========== Проверка файла
Set cnnMain = CreateObject("ADODB.Connection")
cnnMain.CursorLocation = 3
Set cnnMainR = CreateObject("ADODB.Recordset")
cnnMainCon="DRIVER={Microsoft Excel Driver (*.xls)};DBQ=" & SDefaultDir & ";"
cnnMain.Open cnnMainCon
'=================== dBase ==================
Set RSN=WScript.CreateObject("ADODB.Recordset")
Set conn = CreateObject("ADODB.Connection")
conn.CursorLocation = 3
conn.Open "Driver={Microsoft dBase Driver (*.dbf)};DBQ=" & SDefaultDir & ";"
strSQLdbf="SELECT * FROM " & NameFilDBF & " "
Set RS = conn.Execute(strSQLdbf)
objKlRecs=RS.RecordCount 'Количество строк в DBF файле
objKlFields = RS.Fields.count 'Количество колонок в DBF файле
'=================== dBase ==================
' ==============Ввод названий Полей базы данных
'А вот в отличие от переноса данных из файлов EXCEL в dbf здесь необходимо вместо char поставить тип TEXT. Постановка char иногда выдавала ошибку.
SQL="create table " & NameFil & " ("
for i=0 to objKlFields-1
st=RS.Fields(i).Name
if i=objKlFields-1 then
SQL=SQL & "st" & i & " TEXT)"
else
SQL=SQL & "st" & i & " TEXT,"
end if
next
' ==============Ввод названий Полей базы данных
cnnMainR.open SQL,cnnMain,3
iu=0 'Признак вывода ошибок в текстовый файл
iuu=0 'Признак записи в текстовый файл
ikk=0 'Запись строки ошибок
'И тоже, в отличие от переноса данных из файлов EXCEL в dbf необходимо явно указать поля, в которые надо передать данные из dbf файла, т.е. это так для примера
insert into c:\1.xls (st1,st2,st3) values(“1”,”2”,”3”). Для этого вводим stN и stName
for i=1 to objKlRecs
vvv="'"
stN="("
for j=0 to objKlFields-1
st=RS.Fields(j)
'stName=RS.Fields(j).Name
stName="st"&j
if j=objKlFields-1 then
stN=stN & stName & ")"
vvv=vvv & st & "'"
else
stN=stN & stName & ","
vvv=vvv & st & "'" & "," & "'"
end if
next
SQL="insert into " & NameFil & " " & stN & " values(" & vvv & ")"
cnnMainR.open SQL,cnnMain,3
'11111111111111111111 Обработка ошибок 1111111111111111111
iu=0
If Err.Number <> 0 Then
iu=1
ikk=ikk+1
End If
if iu=1 then
iuu=i
Const ForWriting = 2
Set FOut = FSO.OpenTextFile(FileTxt,ForWriting,true)
if ikk=1 then
FOut.WriteLine "Строки ошибок"
end if
FOut.WriteLine (iuu)
end if
'11111111111111111111 Обработка ошибок 1111111111111111111
RS.MoveNext
next
On Error GoTo 0
if iuu>0 then
FOut.WriteLine "Ошибок " & iuu
FOut.Close
end if
ikk=0
iuu=0
iu=0
' Можно указать i, j, objKlRecs и другие переменные, а можно все это не указывать
Set WshShell=Nothing
Set FSO = Nothing
Set oFile=Nothing
set tables=Nothing
cnnMain.Close
Set cnnMain = Nothing
RS.close
Set RS = Nothing
Set RSN = Nothing
conn.close
Set conn = Nothing
if iuu>0 then
WScript.Echo("Проверьте журнал ошибок _FileErr.txt. Файл " & NameFilDBF & " Создан!")
else
WScript.Echo("Файл создан!")
end if
WScript.Quit
'*******************************************************************
Название листа xls или xlsx (по умолчанию создается). Потом можете исправить. Нормализацию делать необязательно. В EXCEL среде есть autofit (автоподбор ширины столбца и высоты строки)
В скрипт AdoED10A.vbs можно добавить вот такой фрагмент и создаем файл AdoED10B.vbs
Set objArgs=WScript.Arguments
if objArgs.Count>0 then
fileVvod=objArgs(0)
else
WScript.Echo " Введите имя файла DBF после AdoED10B.vbs "
WScript.Quit
end if
' ==== Ввод файла DBF через строку данные, которого надо перевести в создаваемый во время процесса файл XLS или XLSX ====
NameFilDBF = FSO.GetFile(fileVvod)
'=========== Проверка файла DBF
sStr=len(trim(NameFilDBF))
if uCase(Mid(trim(NameFilDBF),sStr-3,4))<>".DBF" then
MsgBox "Не файл DBF"
WScript.Quit
end if
'=========== Проверка файла DBF
Файлы в архиве Файлы10.rar. Файлы можно редактировать, а также переделать на JScript.
Внимание!!! Если dbf файл очень большой, то процесс переноса данных из него в EXCEL файл удобно наблюдать и отслеживать в файловом менеджере FAR в той директории (каталоге) где и происходит этот действие. И еще, строки, где есть символ переноса строки, легко переносится в ячейку и вставлять функцию определения переноса строки я не стал. Если это Вам это потребуется, то можете ее вставить. Эта функция описана в статье 9.
Ссылка на файл Файлы10.rar https://disk.yandex.ru/d/MrV0ZM_JPQJ6tg
Подписывайтесь на мой канал и ставьте лайки.