Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Лабуда при чтении VFP DBF (файл Парус-7) с помощью DBFEngine-1.06  [new]
alik-its
Member

Откуда:
Сообщений: 38
Здравствуйте, коллеги!

Проблема следующая.

Значения из поля "NAME" файла с перечнем подразделений выглядит так:
[уйма пробелов]0007007Q[ещё немножко пробелов]Отдел обеспечения.

Кто может подсказать?
22 янв 16, 09:59    [18714426]     Ответить | Цитировать Сообщить модератору
 Re: Лабуда при чтении VFP DBF (файл Парус-7) с помощью DBFEngine-1.06  [new]
Garrick
Member

Откуда: Москва
Сообщений: 3011
alik-its,

а как оно должно было выглядеть?
Как выглядит в FoxPro или Access?
Что нибудь с кодировкой?
22 янв 16, 15:04    [18716338]     Ответить | Цитировать Сообщить модератору
 Re: Лабуда при чтении VFP DBF (файл Парус-7) с помощью DBFEngine-1.06  [new]
alik-its
Member

Откуда:
Сообщений: 38
Должно было выглядеть
Отдел обеспечения

... А "0007007Q" - это слепленные значения двух первых полей: "0007" и "007Q".

Я сделал XBase-копию этого файла и попробовал считать значение - всё честно.
А с оригинальным файлом - что-то странное получается.

Там есть 6 мемо-полей. Может дело в этом?
22 янв 16, 15:23    [18716522]     Ответить | Цитировать Сообщить модератору
 Re: Лабуда при чтении VFP DBF (файл Парус-7) с помощью DBFEngine-1.06  [new]
Partisan M
Member

Откуда:
Сообщений: 1396
не понял, в чём состоит проблема, так как нет вопроса.
Но для чтения базы Foxpro я испытал несколько готовых программ, и больше понравилась от Intelligent Converters (точностью, в том числе преобразуются поля MEMO).
Она преобразует базу из одного формата в другой, например, из Foxpro в MySQL, Oracle или ещё какой-нибудь.
Поскольку Foxpro устарело, то есть смысл конвертировать базу и пользоваться современной СУБД, а Foxpro отправить на свалку истории, хотя скрипты и экранные формы Foxpro не переносимы. В общем, можно посмотреть, правильно преобразует. Бесплатная тестовая версия преобразует только первые 5 записей таблицы. Если правильно, то преобразовать и потом работать с нормальной базой. Также можно в бесплатном LibreOffice, в компоненте Base, открыть этот файл базы. Есть ещё ряд программ, но в этой у меня тоже получилось правильно.
22 янв 16, 22:39    [18718794]     Ответить | Цитировать Сообщить модератору
 Re: Лабуда при чтении VFP DBF (файл Парус-7) с помощью DBFEngine-1.06  [new]
mayton
Member

Откуда: loopback
Сообщений: 47981
Partisan M
Поскольку Foxpro устарело, то есть смысл конвертировать базу и пользоваться современной СУБД, а Foxpro отправить на свалку истории, хотя скрипты и экранные формы Foxpro не переносимы.

Я не Фокспрошник хотя замечу что в своём сегменте у FoxPro нет аналогов.
И если вы ставите знак равенства между произвольной DBMS и языком (и технологией)
то вы допускаете много ошибок.
22 янв 16, 22:50    [18718838]     Ответить | Цитировать Сообщить модератору
 Re: Лабуда при чтении VFP DBF (файл Парус-7) с помощью DBFEngine-1.06  [new]
Partisan M
Member

Откуда:
Сообщений: 1396
mayton
И если вы ставите знак равенства между произвольной DBMS и языком (и технологией)
то вы допускаете много ошибок.


Я не допустил ни одной ошибки и ничего не писал про произвольную DBMS и язык (наверно, тоже произвольный). Foxpro устарело, что можно сообразить хотя бы потому, что последняя версия появилась в 2009 г., она 32-битная, её поддержка прекращена и новых версий не будет.
Технология (DBase-подобные СУБД) устарела (а DBase давно не существует).
Поэтому надо существующие базы сконвертировать в формат одной из современных СУБД и выбросить прежнюю базу вместе с её СУБД (относится ко всем DBase-подобным). Если по какой-то причине сейчас это сделать нельзя (потом всё равно придётся), то предложенный мной способ пригодится, чтобы посмотреть, какие на самом деле данные в исходных таблицах.
22 янв 16, 23:38    [18719011]     Ответить | Цитировать Сообщить модератору
 Re: Лабуда при чтении VFP DBF (файл Парус-7) с помощью DBFEngine-1.06  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 8775
Тоже не фокспрошник. Я бы сказал - к сожалению устарела.

При сравнении "устаревшие технологии" vs "новомодные", по большинству параметров "устаревшие" явно выигрывают.
23 янв 16, 10:59    [18719600]     Ответить | Цитировать Сообщить модератору
 Re: Лабуда при чтении VFP DBF (файл Парус-7) с помощью DBFEngine-1.06  [new]
mad_nazgul
Member

Откуда:
Сообщений: 5395
Partisan M
Я не допустил ни одной ошибки и ничего не писал про произвольную DBMS и язык (наверно, тоже произвольный). Foxpro устарело, что можно сообразить хотя бы потому, что последняя версия появилась в 2009 г., она 32-битная, её поддержка прекращена и новых версий не будет.


Это было чисто "волюнтаристским" решением MS.
Но поначалу фанаты не давали закопать труп.
Да и сейчас, вроде бы, фанаты FoxPro его используют.

Partisan M
Технология (DBase-подобные СУБД) устарела (а DBase давно не существует).


В том то и фишка, что FoxPro это не совсем xBase.
А xBase с элементами SQL.
Данная технология живет и процветает в T-SQL и plSql. :-)
Т.е. процедурный яхык с элементами SQL.

Partisan M
Поэтому надо существующие базы сконвертировать в формат одной из современных СУБД и выбросить прежнюю базу вместе с её СУБД (относится ко всем DBase-подобным). Если по какой-то причине сейчас это сделать нельзя (потом всё равно придётся), то предложенный мной способ пригодится, чтобы посмотреть, какие на самом деле данные в исходных таблицах.


Для "переноса" БД из DBF в любую другую БД есть куча различных программ.
Самый простой способ использовать MS Excel.
25 янв 16, 07:04    [18724038]     Ответить | Цитировать Сообщить модератору
 Re: Лабуда при чтении VFP DBF (файл Парус-7) с помощью DBFEngine-1.06  [new]
alik-its
Member

Откуда:
Сообщений: 38
Здравствуйте, коллеги!

Задача как раз и состоит в том, чтобы без лишних движений руками
сравнить между собой данные в файлах "Паруса" и во внутренней ИС
и вывести в отдельный файлик журнал результатов.

Если у кого-то есть опыт программной обработки DBF-файлов "Паруса",
подскажите, пожалуйста!
25 янв 16, 09:47    [18724295]     Ответить | Цитировать Сообщить модератору
 Re: Лабуда при чтении VFP DBF (файл Парус-7) с помощью DBFEngine-1.06  [new]
Garrick
Member

Откуда: Москва
Сообщений: 3011
alik-its
Должно было выглядеть
Отдел обеспечения

... А "0007007Q" - это слепленные значения двух первых полей: "0007" и "007Q".

Могу предположить, что ваш драйвер неправильно обрабатывает файл DBF. Попробуйте другой драйвер. Либо в этом, если есть возможность, указать другой тип DBF (они бывают разные).
25 янв 16, 12:20    [18725055]     Ответить | Цитировать Сообщить модератору
 Re: Лабуда при чтении VFP DBF (файл Парус-7) с помощью DBFEngine-1.06  [new]
Partisan M
Member

Откуда:
Сообщений: 1396
mad_nazgul
Для "переноса" БД из DBF в любую другую БД есть куча различных программ.


Куча есть, но я испытал несколько, и погрешности в преобразованных данных бывают. Назвал те программы, в которых не увидел их.

Ограниченная поддержка SQL в FoxPro не имеет отношения к теме, т.к. обсуждается чтение файлов базы данных.
25 янв 16, 21:36    [18728089]     Ответить | Цитировать Сообщить модератору
 Re: Лабуда при чтении VFP DBF (файл Парус-7) с помощью DBFEngine-1.06  [new]
alik-its
Member

Откуда:
Сообщений: 38
Чтобы привести начальный файл в читаемое состояние
(критерий этого - корректный доступ из MSAccess2003),
мне пришлось пересохранить его в формате DBaseIV
из DBFNavigator.

Напомню задачу. Прочитать DBF-файл, распакованный
из архива БД "Парус-7" без промежуточных ручных
преобразований.
26 янв 16, 09:08    [18728880]     Ответить | Цитировать Сообщить модератору
 Re: Лабуда при чтении VFP DBF (файл Парус-7) с помощью DBFEngine-1.06  [new]
Garrick
Member

Откуда: Москва
Сообщений: 3011
alik-its
Чтобы привести начальный файл в читаемое состояние
(критерий этого - корректный доступ из MSAccess2003),
мне пришлось пересохранить его в формате DBaseIV
из DBFNavigator.

Напомню задачу. Прочитать DBF-файл, распакованный
из архива БД "Парус-7" без промежуточных ручных
преобразований.

Файлы DBF, созданные разными программами, как ни странно, и конечно же благодаря Microsoft (а кто же ещё?), имеют разную структуру. Например файлы FoxPro отличаются от dBase расширенным форматом MEMO полей, FoxPro 2 от FoxPro 3 кодировкой CP866-WIN1251 и т.п. И конечно же все они отличаются структурой индексов. Вам надо точно определиться с форматом ваших исходных файлов. Судя по описанию вашей проблемы, инструмент, которым вы пользуетесь, неверно определяет границы полей в файле и показывает вам часть файла, включающую несколько полей, как оно поле. Т.к. с размерностью полей в DBF напутать довольно сложно, могу предположить, что смещение идёт из-за другой размерности заголовка файла, нежели предполагает ваш инструмент. Попробуйте поискать альтернативу или выставить правильные настройки для чтения DBF файла, если ваш инструмент предполагает какие-либо настройки.
26 янв 16, 09:41    [18728957]     Ответить | Цитировать Сообщить модератору
 Re: Лабуда при чтении VFP DBF (файл Парус-7) с помощью DBFEngine-1.06  [new]
alik-its
Member

Откуда:
Сообщений: 38
Вот здесь описана вся схема DBF-заголовка, включая тип 48, как в моём случае.
При рассмотрении в строковом виде нашёл фрагмент в 264 байта, начинающийся с "parus.dbс".
Делаю, вроде, по схеме, но получаю всё равно кривой расклад по полям.
3 фев 16, 14:39    [18767596]     Ответить | Цитировать Сообщить модератору
 Re: Лабуда при чтении VFP DBF (файл Парус-7) с помощью DBFEngine-1.06  [new]
Garrick
Member

Откуда: Москва
Сообщений: 3011
alik-its,

файл в какой ОС был создан?
3 фев 16, 15:38    [18768046]     Ответить | Цитировать Сообщить модератору
 Re: Лабуда при чтении VFP DBF (файл Парус-7) с помощью DBFEngine-1.06  [new]
alik-its
Member

Откуда:
Сообщений: 38
Кажется, Windows ХР.
Думаю, если и Far-овский плагин, и DBFNavigator его корректно открывают,
Значит я что-то криво делаю.

... Сижу вот - прочтённые байты считаю.
Заголовок - 32, поля - тоже по 32, символ окончания заголовка на месте.
Потом идёт parus.dbс и куча \0, потом - первое значение первого поля.
Расстояние между первым и вторым значениями первого поля соответствует размеру записи.
... В приведённой схеме есть что-то про зарезервированный фрагмент после описания полей...
3 фев 16, 16:16    [18768341]     Ответить | Цитировать Сообщить модератору
 Re: Лабуда при чтении VFP DBF (файл Парус-7) с помощью DBFEngine-1.06  [new]
alik-its
Member

Откуда:
Сообщений: 38
alik-its
При рассмотрении в строковом виде нашёл фрагмент в 264 байта, начинающийся с "parus.dbс".

Когда пытаюсь считать значение первого поля первой записи, получаю "arus", -
первое поле - типа С4. То есть читать мой обработчик начинает задолго до нужного значения,
но на 1 знак позже, чем символ конца заголовка.
3 фев 16, 16:25    [18768437]     Ответить | Цитировать Сообщить модератору
 Re: Лабуда при чтении VFP DBF (файл Парус-7) с помощью DBFEngine-1.06  [new]
Garrick
Member

Откуда: Москва
Сообщений: 3011
alik-its,

Другую библиотеку для чтения DBF не пробовали? Их же полно разных.
4 фев 16, 08:45    [18770957]     Ответить | Цитировать Сообщить модератору
 Re: Лабуда при чтении VFP DBF (файл Парус-7) с помощью DBFEngine-1.06  [new]
alik-its
Member

Откуда:
Сообщений: 38
Другие не пробовал, а эту взял за наличие исходников.
Сейчас опять поищу...
4 фев 16, 09:50    [18771184]     Ответить | Цитировать Сообщить модератору
 Re: Лабуда при чтении VFP DBF (файл Парус-7) с помощью DBFEngine-1.06  [new]
alik-its
Member

Откуда:
Сообщений: 38
... Или мёртвые ссылки, или через JDBC-ODBC, - а это мне не подходит.
Пробовал на дуру вырезать лишних 264 байта между концом заголовка
и началом данных, тоже некорректно читает.
Прикладываю используемый пакет: вдруг кому интересно станет.

К сообщению приложен файл (DBFEngine-1.06.zip - 29Kb) cкачать
4 фев 16, 10:13    [18771270]     Ответить | Цитировать Сообщить модератору
 Re: Лабуда при чтении VFP DBF (файл Парус-7) с помощью DBFEngine-1.06  [new]
alik-its
Member

Откуда:
Сообщений: 38
... А, ну да! А файлик, который надо прочитать - вот.

К сообщению приложен файл (ztipdol.rar - 14Kb) cкачать
4 фев 16, 11:00    [18771521]     Ответить | Цитировать Сообщить модератору
 Re: Лабуда при чтении VFP DBF (файл Парус-7) с помощью DBFEngine-1.06  [new]
lleming
Member

Откуда:
Сообщений: 1733
ни sdbf Ни dbf manager открыть файл могут.

LibreOffice открывает и вроде нормально, можно через его Java API попробовать вытащить данные (SDK качнуть надо будет)

hxtt драйвер нормально читает но он платный
4 фев 16, 11:24    [18771662]     Ответить | Цитировать Сообщить модератору
 Re: Лабуда при чтении VFP DBF (файл Парус-7) с помощью DBFEngine-1.06  [new]
alik-its
Member

Откуда:
Сообщений: 38
Вот у этого мастера есть инструмент, который открывает любые DBF.
И ещё FAR-овский плагин LOOKDBF - тоже спокойно и чётко открывает.
Значит у них учтены тонкости о которых мы не знаем!

К А К И Е ? ! !
4 фев 16, 11:30    [18771711]     Ответить | Цитировать Сообщить модератору
 Re: Лабуда при чтении VFP DBF (файл Парус-7) с помощью DBFEngine-1.06  [new]
lleming
Member

Откуда:
Сообщений: 1733
ни sdbf Ни dbf manager открыть файл не могут.

автор
Значит у них учтены тонкости о которых мы не знаем!


единого стандарта нет на dbf поэтому кто как реализовывал в те годы
4 фев 16, 11:48    [18771831]     Ответить | Цитировать Сообщить модератору
 Re: Лабуда при чтении VFP DBF (файл Парус-7) с помощью DBFEngine-1.06  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 8775
alik-its
... А, ну да! А файлик, который надо прочитать - вот.

Не прошло и недели, автор догадался файл выложил....

Такими темпами, думаю задачу раньше чем через неделю решить не реально )))
4 фев 16, 12:22    [18772020]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Java Ответить