ПредишенСледващото

Като се започне от 513-ия байт от началото на файла, информационни блокове са подредени. Стойността на полето може да заема един или няколко блока. Всеки блок, който е първият запис съдържа 8-байтов глава (4 байта подпис 0h00000001 и 4 байта - дължината на полето), последвано от действителните данни.

С цел да се комуникира с данните в Таблица FPT-файл във всеки запис на файлове DBF-бележка поле има 10 байта, които се съхраняват в първия брой на информационния блок. И числото се съхранява под формата на характер с водещи пространства. Например, за да се посочи единица 8, това поле ще съдържа стойност "8" (шестнадесетичен "20 20 20 20 20 20 20 20 20 38", при 38 - ASCII код "8" символ). Номерацията на блоковете идва от началото на файла, т.е. включва заглавната си част.

Например, когато стандартната дължина блок от 64 байта от данни за запис ще започне в блок 8 (дължината на глава 512, размера на блока разделен от 64).

Какво ще трябва да се бори

Теоретично DBF формат позволява съхранение в тип поле бележка до 4 GB на данни. На практика обаче, поради присъщите ограничения по отношение на дължината на линията FoxPro работят с полета над 65 504 знака става проблематични. На практика, дължината на това поле е рядко повече от няколко хиляди знака. Ето защо, е допустимо да се предположи, че полето за тип данни на бележката може да бъде поставена в поле от тип текст PostgreSQL маса (максимално поле - 1 GB). Така, че размерът на областта няма да се счита за проблем.

Harder че Допълнителни полета могат да включват различни символи, включително нов ред. Тъй като обработката на текстов файл PostgreSQL приема този знак като разделител за запис, тогава ще трябва да се грижи за нейната проверка. И в случай на края на линията формат на DOS стил (CR + LF) скрининг е необходимо, тъй като символ за нов ред (0x0D) и символа за нов връщане (0x0A).

Изпълнение на FoxPro

FoxPro работи с мемо полета е прозрачна, така че не се изисква никакво усилие от страна на програмиста. Не забравяйте да поставите символа "" пред символа, използвани:

Обява 1. memo2pg.prg файл (FoxPro)

използвате wmem Отворете таблицата с мемо полета

m.delimiter = CHR (9) символ Tab

* Текст поле - разделители и щит символа "\"

m.descr = strtran (m.descr, m.delimiter ,;

* Най-бележка областта допълнително щит на края на линията на символи (ASCII-код 10 и 13)

m.memfld = strtran (m.memfld, m.delimiter ,;

m.memfld = strtran (m.memfld, CHR (13);

m.memfld = strtran (m.memfld, CHR (10);

* Записва резултатите във файл, разделяйки символ поле, което се съхранява в променлива m.delimiter

изчакайте прозорец "Готово".

Фигура. Работа прозорците FoxPro

Ако решите да работите с CSV формат, вместо раздела като разделител е запетая, а всяко поле с данни, независимо от типа, че ще трябва да заобикалят simvolom- "цитат", като "" ", който е по подразбиране. Е, във всички области, "кавички", трябва да бъдат удвоени, за да се премахнат специалните им тълкуване.

Изпълнение в Python

И тук ние ще трябва да се прилага на всички знания, натрупани в продължение на DBF формат и FPT файлове. Като напълно разбор на скрипта DBF-файла са предвидени в предишната статия, тук можем да се ограничим до тази част, която е отговорна за получаване на данни от областта за означение. Тя се основава на сценарий dbf2pg.py, обсъдени в предишна статия (виж. Обява 2). Тя добавя полета обработка тип «М» една линия преработка всеки запис (съответните линии, подчертани в червено шрифт):

Обява 2. Фрагмент dbf2pg.py скрипт, добави линии

защото в диапазон (бр):

ако полета [I] .type == "М":

ако полета [I] .type == 'D':

Fld = Fld [: 4] + '-' + FLD [4: 6] + '-' + FLD [6]:

Тук, когато открие чете стойността на тип поле бележка се третира като се състои от няколко първия блок данни, както и функцията се нарича разбор FPT-файл:

Обява сценарий 3. Фрагмент dbf2pg.py, memo2pg функция

# Трансформира Блок брой сред

FPT = отворен (basetabname + '.fpt "," Rb)

# Прочетете размера на блока

блока = междинно съединение (РСР (fpt.read (1)) * 256 + РСР (fpt.read (1)))

# Шими на върха на групата данни

# Прочетете размера на полето за данни

fieldsize = РСР (fpt.read (1)) * 16777216 + РСР (fpt.read (1)) * 65536 + РСР (fpt.read (1)) * 256 + РСР (fpt.read (1))

# Транскодиране, скрининг и така нататък.

данни = уникод (данни "cp866"). кодират ( "KOI8-R ')

данни = data.replace ( "\ x0A", "\\ '+' \ x0A)

данни = data.replace ( "\ x0D", "\\ '+' \ x0D)

данни = data.replace (разделител, "\\ '+ разделител)

И накрая, трябва да се грижи, открита в двоичен режим, както и да се образува в края на низа за Python не се обработват нови редове се защо вместо да показва всяка линия, образувана от изявление за печат, ще пиша до файла ръчно, тъй като ние трябва:

Обява 4. Фрагмент dbf2pg.py скрипт линии на запис файл

В резултат dbf2pg.py сега може да се справи и бележка-област.

FoxPro език предоставя усъвършенствани инструменти за работа с файловете си (ще изглежда странно, ако не беше) и да извършва конвертиране на DBF файл в друг формат с това означава - тя е на няколко реда код. Въпреки това, той не е от значение, ако не сте много добри приятели с тях, или не може да го използва по някаква причина. Binary DBF формат, както можете да видите, е съвсем проста и лесна за използване. Така че, ако е необходимо, за да изпълни своите съществуващи преработвателни импровизирани средства за работна ръка няма да се правят.

Свързани статии

Подкрепете проекта - споделете линка, благодаря!