Dbf — Как создать DBF файл в PHP


Dbf — Как создать DBF файл в PHP

Здесь могла бы быть ваша реклама

Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006
Откуда: Israel

Секрет
Теперь, когда вы уже наверняка второпях отправили свой запрос,
я расскажу вам простой секрет, который сэкономит вам уйму ожиданий,
даже если первый ответ по теме последуем сразу же.

Само собой я знаю что ответят мне тут же, и если я посмотрю
на сообщения на форуме, то пойму что в общем то я и не ошибаюсь.
Но еще я точно замечу, что очень мало тем, в которых всего два ответа :
вопрос автора и еще два сообщение вида Ответ + Спасибо

После этого приходится начинать уточнять этим неграмотным что мне надо.
Они что, сами читать не умеют? А уточнять приходится.
И иногда пока они переварят то что я им скажу проходит и не одна ночь..

Уверен что если бы я им сказал что у меня есть
фиолетовый квадрат, и нужно превратить его в синий треугольник
и я пытался взять кисточку, макнуть в банку и поводить ей по квадрату
но почему то кисточка не принимала цвет краски в банке,
то на мой вопрос — где взять правильные банки мне бы ответили гораздо быстрее
предложив её открыть, а не тратить еще стольник на жестянку.

Поэтому с тех пор я строю свои вопросы по проверенной давным давно схеме:
Что есть
Что нужно получить
Как я пытался
Почему или что у меня не получилось.

На последок как оно происходит на форумах

Новичок: Подскажите пожалуста самый крепкий сорт дерева! Весь инет перерыл, поиском пользовался!
Старожил: Объясни, зачем тебе понадобилось дерево? Сейчас оно в строительстве практически не используется.
Новичок: Я небоскрёб собираюсь строить. Хочу узнать, из какого дерева делать перекрытия между этажами!
Старожил: Какое дерево? Ты вообще соображаешь, что говоришь?
Новичок: Чем мне нравиться этот форум — из двух ответов ниодного конкретного. Одни вопросы неподелу!
Старожил: Не нравится — тебя здесь никто не держит. Но если ты не соображаешь, что из дерева небоскрёбы не строят, то лучше бы тебе сначала школу закончить.
Новичок: Не знаите — лучше молчите! У меня дедушка в деревянном доме живёт! У НЕГО НИЧЕГО НЕ ЛОМАЕТСЯ.
Но у него дом из сосны, а я понимаю, что для небоскрёба нужно дерево прочнее! Поэтому и спрашиваю. А от вас нормального ответа недождёшся.
Прохожий: Самое крепкое дерево — дуб. Вот тебе технология вымачивания дуба в солёной воде, она придаёт дубу особую прочность:
Новичок: Спасибо, братан! То что нужно.

Отредактировано модератором: Uchkuma, 26 Апреля, 2011 — 10:21:12

DBF в MySQL на PHP без доп. конвертиций и библиотек

добрый день господа

есть в инете много решений конвертации DBF -> MySQL. часть из них на C, часть DBF -> CSV -> MySQL, есть код который глючит, есть код который рассчитан на малюсинькие DBF’ки, и при конвертации больших файлов -> превышено ожидание, есть решения в стиле мьсье, с доп. библиотеками. и т.п.

подскажите пожалуйста цикл, считывающий поочередно строки из DBF, и записывающий в MySQL. без доп. библиотек, на PHP (или JS). не важно быстрый или медленный, главное что бы работал.

Чем создать DBF?

Рассмотрим основные варианты, с помощью которых можно создать файл формата DBF (Database File). Зачастую выполнение данной задачи не потребудет каких-либо особых хитростей, просто скачайте dBase (для операционной системы Windows) — интерфейс программы не сложный, да и скачать ее вы можете бесплатно. Если же вы пользуетесь операционной системой Mac — скачайте GTK DBF Editor как основную для данной платформы.

Вооружившись программой с правильным функционалом, вы наверняка не испытаете проблем с созданием файла DBF. Мы собрали в общий список все программы походящие под данную задачу для ОС Windows, Mac, Linux и сделали удобную таблицу:

dbase_create

(PHP 5 dbase_create — Создает базу данных

Описание


dbase_create() создает базу данных dBase с заданными свойствами. Если файл уже существует, то он не будет предварительно очищен. Для принудительной очистки используйте функцию dbase_pack() .

Замечание: Когда опция safe mode включена, PHP проверяет, имеют ли файлы/каталоги, с которыми вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт.

На поведение этой функции влияет значение директивы open_basedir.

Цукерберг рекомендует:  Книжная полка маркетолога что советуют профессионалы

Список параметров

Имя базы данных. Это может быть относительный или абсолютный путь к файлу, в котором dBase будет хранить ваши данные.

Массив массивов, в котором каждый массив описывает формат одного поля базы данных. Формат каждого поля состоит из имени этого поля, символа, указывающего тип поля, и, при необходимости, его длину, точность и флаг обнуляемости. Поддерживаемые типы файлов перечислены в вводной секции.

Тип создаваемой базы данных. Либо DBASE_TYPE_DBASE либо DBASE_TYPE_FOXPRO .

Имена полей ограничены в длину и не должны превышать 10 символов.

Возвращаемые значения

Возвращает идентификатор связи с базой данных, если база данных успешно создана, или FALSE в случае ошибки.

Список изменений

Версия Описание
dbase 7.0.0 Добавлен параметр type .
dbase 7.0.0 Возвращаемое значение теперь имеет тип resource а не int .

Примеры

Пример #1 Создание файла базы данных dBase

// база данных «definition»
$def = array(
array( «date» , «D» ),
array( «name» , «C» , 50 ),
array( «age» , «N» , 3 , 0 ),
array( «email» , «C» , 128 ),
array( «ismember» , «L» )
);

Создание DBF файла

Я Uchenica74

Добрый день! Создаю дбф — файл, добавляю поля, записываю, затем пытаюсь открыть, чтобы очистить и заполнить колонки, ругается на метод ОчиститьФайл(), говорит что перед этим файл нужно открыть. Ну так я его открываю, подскажите пожалуйста,в чем еще может быть проблема?

Файл = Новый XBase;
Файл.Кодировка = КодировкаXBase.OEM;
Файл.Поля.Добавить(«TAB_N»,»S»,10);
Файл.Поля.Добавить(«NAME»,»S»,150);
Файл.Поля.Добавить(«SERNUM»,»S»,11);

ПутьФ = Путь + «\» + «IMPORT.dbf»;
ПутьИ = Путь + «\» + «IMPORT.cdx»;

Файл.СоздатьФайл(ПутьФ,ПутьИ);
Файл.Записать();
//Файл.ЗакрытьФайл();


Создание справочника адресной информации с блекджеком и API

Часть 1. Трагическая. “За что мне все это?!”

Столкнулись мы как-то с необходимостью ввода корректной информации о местонахождении (прописке, регистрации) пользователей, и с тем, что проблема эта решается не совсем так легко и просто, как бы нам хотелось. Сначала мы попробовали КЛАДР, в его бесплатной ипостаси. Не то чтобы нам прямо-таки решительно все не понравилось, но было как минимум одно весьма раздражающее обстоятельство — некоторые адреса отсутствовали в справочнике. Например, дом 10 есть, а 10к1 — извините, не завезли. Вообще КЛАДР был привлекателен тем, что у него есть простой API и плагины (jQuery в частности), которые можно легко встроить в приложение, но отталкивал наполнением. Мы задумались — если нет такого ресурса, содержащего полную и наиболее актуальную адресную информацию, с API и плагинами, то единственный выход — создать такой ресурс самим.

Часть 2. Искательская. “Где собака зарыта?!”

И прослышали мы про ФИАС. О том как он бесконечно полон и прекрасен. А это выход! На сайте ФИАС есть базы, и все что нужно молодой растущей информационной системе! Правда, размер базы составляет более 4 Gb, ну да ладно, это же вся Россия! Обновляется база регулярно, так что есть где разгуляться. Дело за малым — развернуть базу, прикрутить API и плагины. Надо оговориться, что существует несколько релевантных и важных статей. К примеру, цикл вот этих статей, которые изначально очень помогли.

Часть 3. «Как это работает»

Проблемы начались с того, что база данных ФИАС поставляется в формате .dbf, данные из которого надо было как-то перенести в PostgreSQL, который было решено использовать в качестве БД.

Нужно отметить, что кроме формата .dbf, база представлена в формате xml. Как известно, человеку хочется всего и сразу. Чтобы включил и работает. Но разобраться сразу с тем, что же дает ФИАС довольно проблематично.

Итак, по адресу fias.nalog.ru в разделе обновлений имеется следующее:

    Информация про обновления: по официальным данным — выходят не менее раза в неделю. Специфика следующая. Иногда выходят битые обновления. Их размер примерно 1,2 Mb и при скачивании дается битый архив, поэтому торопиться настраиваться только на последнее обновление — вызывает вопросы.

  • Обновления в виде fias_delta_. — в форматах .dbf и .xml.
  • Собственно база данных fias_. — в форматах .dbf и .xml.
  • База данных в формате КЛАДР. Наименование файлов “Base.*” arj или 7z Отличается тем, что отсутствуют многие поля (касательно налоговых данных и т.д.), поиск осуществляется по КЛАДРовскому id. Изначально присутствует соблазн использовать именно данный формат, так как он более легок для понимания и последующего внедрения. Но при более внимательном изучении портала, обнаружится, что данная версия будет поддерживаться только до конца 2020 года, а затем будет deprecated.
  • Примечание: для работы с .dbf файлами необходимо установить стороннее расширение для php_dbase.dll.

    Так какую же все таки выбрать версию для скачивания .xml или .dbf? Отличия следующие:

      xml — каждый файл в архиве — отдельная таблица. В чем состоит проблема. К примеру, размер файла “HOUSEXX” где хранятся дома, составляет более 20 Gb в разархивированном виде. Как его парсить? С одной стороны, если у вас более 30 Gb RAM, то это не составит проблемы. Также, если вы знаток грамотных библиотек, таких как SAX Parser для Java, которые не загружают файл целиком в память, а парсят частями, то может быть что-то и получится.

  • dbf — файлы не только разделяются как таблицы, но и подразделяются по регионам. Окажется более приемлемым вариантом, если вам не нужны адреса необъятной Родины, а только одного региона (как в нашем конкретном случае).


  • Итак, распаковали файлы. Какая информация нам нужна? Видим следующий набор файлов:

    • ADDROBХХ.DBF, где ХХ — номер региона — содержит данные непосредственно о регионе, автономных округах, городах и прочих населенных пунктах, улицах.
    • HOUSEХХ.DBF, где ХХ — номер региона — содержит информацию о номерах домов.
    • NORDOCХХ.DBF, где ХХ — номер региона — содержит информацию о причинах изменений в различных записях.
    • ROOMХХ.DBF, где ХХ — номер региона — содержит информацию о помещениях.
    • STEADХХ.DBF, где ХХ — номер региона — содержит информацию о земельных участках.
    • SOCRBASE.DBF — содержит информацию о сокращениях.
    • STRSTAT.DBF — содержит информацию о типе строения.

    Кроме данных таблиц существует еще ряд других — служебных таблиц, которые содержат информацию о сокращениях в других таблицах.

    В большинстве случаев достаточно сформировать адрес вплоть до дома. Хотя, если кому надо, то можно углубиться и дальше.

    Таким образом, создадим 2 таблицы в БД postgresql.

    Таблица с адресами:

    Таблица с номерами домов:

    Импорт данных осуществляется простым способом. Открываем файлы в Excel и сохраняем их как csv. Дополнительно рекомендуется изменить кодировку, так как в отличии от xml файлов, которые представлены в кодировке utf-8, dbf файлы — в кодировке win-866. Открываем файлы в редакторе (для данной цели подойдет notepad++) и преобразуем в utf-8.

    Импорт таблицы с адресами:

    Импорт таблицы с домами:

    Из чего сделана таблица ADDROBXX?

    Несмотря на обилие полей, понадобятся только некоторые из них.

    • ACTSTATUS — поле содержит значения 0 и 1. При внимательном просмотре обнаружится, что в таблице множество улиц с одним и тем же названием. Дело в том, что налоговая база содержит историю объектов, т.е. изменения, которые происходили с каким-либо элементов адреса. К примеру, улиц Ленина может быть 10 штук. Из них 9 — будут неактуальными. Они могли быть переименованы или изменены другим образом. ACTSTATUS — 0 — неактуальные адреса, а 1 — будет единственным актуальным.
    • AOGUID — ID записи. Для разных исторических записей будет один и тот же AOGUID. Различаться они будут по полю AOID.
    • AOLEVEL — уровень объекта. Под номером 1 — субъект федерации, 4 — город, 7 — улица и т.д.
    • CENTSTATUS — статус центра. Например, города в областном центре.
    • FORMALNAME — название объекта.
    • PARENTGUID — ID родительского элемента. При поиске города к которому принадлежит улица. PARENTGUID улицы будет совпадать с AOGUID улицы.
    • POSTALCODE — почтовый индекс.
    • REGIONCODE — код субъекта федерации.

    Примечание: на fias-nalog.ru можно найти полное описание всех полей.

    Важное в таблице HOUSEXX:

    • AOGUID — ID улицы в ADDROBXX, в которой находится дом.
    • HOUSEGUID — ID дома.
    • Сложность заключается в наименовании дома. Оно состоит из 4 полей:
    • BUILDNUM — номер корпуса.
    • HOUSENUM — номер дома.
    • STRUCNUM — номер строения.
    • STRSTATUS — признак строения (от 0 до 4, где 0 — никакого, 1 — строение, 2 — сооружение, 3 — литера).

    Поля могут содержать схожую или идентичную информацию и выходить из ситуации приходится экспериментальным путем. В классе QuerryController (ссылка на репозиторий — ниже) есть метод: chooseBuilding, в котором мы попытались решить эту задачу. Может быть у кого-то получится лучше. Запросы к БД находятся там же.

    Далее, после того, как база была импортирована в Postgres — мы занялись созданием API и плагина для нашей системы.

    Для API, дабы не изгаляться, использовали Laravel. Схема запросов получилась достаточно простой. Иерархия объектов выглядит следующим образом:

    • Субъект федерации
    • Регион субъекта федерации
    • Населенный пункт
    • Улица
    • Дом

    К слову, тестируя систему, мы столкнулись с тем, что не во всех населенных пунктах есть улицы, и не на всех улицах есть дома, что нас немало удивило, и озадачило. Это обстоятельство не давало покоя потому, что если предоставить пользователю возможность самому вводить информацию, то понапишут такого, что невольно возникает вопрос — “Эти люди вообще в школе-то учились?!”.
    Поэтому было решено не давать пользователю ни малейшей возможности для самодеятельности, а для таких вот “отсутствующих” адресов предоставить возможность подать заявку на включение отсутствующего адреса в справочную систему.


    Схема запросов выглядит просто:

    • myfias/choose_dstrict — список субъектов федерации
    • myfias/choose_region— список районов субъекта федерации
    • myfias/choose_city— список населенных пунктов региона
    • myfias/choose_street— список улиц населенного пункта
    • myfias/choose_building— список домов улицы населенного пункта

    Для последнего пункта формируется список домов с литерами, корпусами, строениями, и прочим.
    После всех мытарств сделали плагин на vue.js, для работы со справочником, и его альтернативу на jQuery.

    Регион и район можно убрать за ненадобностью, так как они подтягиваются вместе с городами.
    При вводе высплывают autocomplete-подсказки, как и в КЛАДР. Правда разница заключается в том что КЛАДР-плагин предназначен для автодополнения, а здесь валидным считается только адрес, выбранный из подсказок.

    В папке ASPUDcomponent — находится VueJs компонент для работы с адресной базой.
    Исходники доступны в нашем репозитории.

    Часть 4. Как это все обновлять?

    С обновлениями ситуация следующая: для начала необходимо по протоколу SOAP получить версии обновлений. Посмотреть как это делается можно в классе UpdateController (метод: filesVersions()).

    Примечание: версия, которая указана последней в полученном списке — не обязательно совпадает с той, которую можно скачать на главной странице. Но не стоит спешить скачивать только последнюю версию, так как она может оказаться “битой”. Случались и таким прецеденты. Далее скачивается архив с последней версией и распаковывается. Для работы необходимо использование расширения для php (php_rar.dll).

    Ну а далее выбирается необходимый файл региона (или при необходимости все файлы) для обновления БД.

    Написание функций чтения/записи в DBF-файл (как в модуле php_dbase.dll)

    Miha-ingener

    Новичок

    Написание функций чтения/записи в DBF-файл (как в модуле php_dbase.dll)

    Вот такой занимаюсь задачей — необходимо написать функции для чтения/записи/удаления/замены данных в DBF-файлах.

    Есть в php стандартный модуль — php_dbase.dll он может следующее:

    dbase_numrecords — Find out how many records are in a dBase database
    dbase_get_record_with_names — Gets a record from a dBase database as an associative array
    dbase_get_record — Gets a record from a dBase database

    dbase_add_record — Add a record to a dBase database
    dbase_replace_record — Replace a record in a dBase database
    dbase_delete_record — Deletes a record from a dBase database
    dbase_create — Creates a dBase database
    dbase_pack — Packs a dBase database
    dbase_open — Opens a dBase database
    dbase_close — Close a dBase database
    dbase_get_header_info — Get the header info of a dBase database
    dbase_numfields — Find out how many fields are in a dBase database

    Считать количество записей, считывать, записывать, заменять записи и т.д.

    Проблема вот в чём — поддержка этого модуля невозможна на серверах с ОС FREEBSD. Поэтому мне хочется написать такие же функции, выполняющие тоже самое и подключать их на тех хостингах, где нет поддержки этого модуля.

    Форум PHP программистов ► PHP практикум ► PHP + SQL


    Пейджер выключен!

    Сообщений: 321
    Пользователь №: 31230
    На форуме:
    Карма:

    Здравствуйте уважаемые форумчане, столкнулся с проблемой: есть у меня определённые .dbf файлы и надо их через php перегнать в БД.
    Пробовал писать так (ну что бы он вывел содержимое .dbf на экран)

    Всё замечательно выводиться но вот незадача: как это добавить в базу ума не приложу. Может кто то подскажет как разбить файл по одномерным массивам или как положить его в базу

    берется одна строка из файла? Или нет?
    Вот ее и добавляй в таблицу свой базы через INSERT каждый раз.

    Visman
    Не могу понять как сделать sql запрос, пытался так

    но он мне array наложил туда

    И тогда запрос выглядит примерно так

    З.Ы. Значения для числовых полей не надо в кавычки брать.

    Подписаться на тему
    Уведомление на e-mail об ответах в тему, во время Вашего отсутствия на форуме.

    Подписка на этот форум
    Уведомление на e-mail о новых темах на форуме, во время Вашего отсутствия на форуме.

    Скачать/Распечатать тему
    Скачивание темы в различных форматах или просмотр версии для печати этой темы.

    Dbf — Как создать DBF файл в PHP

    filePath = xInfo :: directory ( directoryType :: Temp );
    fileName = filePath + #CashInventExpFile ;

    if ( WinAPI :: fileExists ( filename ))
    WinAPI :: deleteFile ( filename );

    dBF_Con = new CCADOConnection ();
    aDO = new CCADOCommand ();
    aDR = new CCADORecordset ();

    ADO . activeConnection ( dBF_Con );

    if ( dBF_Con )
    <
    cmdText = » CREATE TABLE » + fileName + » (CODE char(13), SH_CODE char(13), NAME char(90), PRICE numeric, DIVNUM char(2), RES numeric)» ;
    ADO . commandText ( cmdText );
    ADR = ADO . execute ();

    Как в PHP создать DBF файл?

    M-Crack
    12.08.2015
    Здравствуйте, подскажите пожалуйста как создать DBF файл и заполнить его какими-нибудь данными? Я знаю что есть такие функции dbase но они то уже устарели, приходится пихать в сервере всякие расширения, а на реальных хостингах то этого ни кто сделать не даст.
    Поэтому подскажите как стандартными средствами, может есть где какой-нибудь пример или класс для этого?
    Дополнено (1). Про функцию dbase мне писать не надо, она уже устарела, посоветуйте другой метод. Ну класс может кто видел такой для работы с dbf или как-то вручную заголовки может вписать в структуру файла чтобы он как dbf себя вёл.

    lex grachov
    12.08.2015
    Нашел по второму клику. Ты еврюга ленивая

    Цукерберг рекомендует:  MongoDB для начинающих основные команды
    Понравилась статья? Поделиться с друзьями:
    Все языки программирования для начинающих