Reinkarnáció ii memo-adatmező

Kezdve 513-edik bájt a fájl elején, adatblokk van elrendezve. A mező értéke lehet elfoglalni egy vagy több blokkot. Minden egyes blokk, amely az első rekord tartalmaz egy 8 bájtos fejlécet (4 bájt aláírás 0h00000001 és 4 byte - a hossza a területen), majd a tényleges adatokat.

Annak érdekében, hogy kommunikáljon a táblázat adatai FPT-fájl minden rekord fájl dbf-memo mező van 10 bájt, amely tárolja az első adat blokk számát. És a szám tárolva formájában karaktert a vezető helyen. Például, hogy azt az egységet, 8, ez a mező tartalmazza az értéket "8" (hexadecimális "20 20 20 20 20 20 20 20 20 38", ahol 38 - ASCII-kód "8" szimbólum). A számozás a blokkok származik a fájl elején, hogy van, tartalmazza a fejlécet.

Például, ha a standard blokk hossza 64 byte adatok rögzítésére blokkjánál kezdődik 8 (a fejléc hossza 512, a blokkméret osztva 64).

Mi lesz a harcot

Elméletileg DBF formátum lehetővé teszi tárolása a típus mezőben Memo 4 GB adat. A gyakorlatban azonban amiatt, hogy lényeges korlátozások a vonal hossza FoxPro működik mezők felett 65504 karakter problematikussá válik. A gyakorlatban, a hossza ezen a területen ritkán több, mint néhány ezer karakter. Ezért megengedhető, hogy vállalja, hogy az adatok típusa mező a feljegyzés lehet helyezni egy olyan területen típusú szöveg PostgreSQL tábla (maximum területén - 1 GB). Ahhoz, hogy a méret a mezők nem jelentett problémát.

Harder, hogy Memo-mezők között lehet a különböző szimbólumok, beleértve egy új sor. Mivel a feldolgozás egy szöveges fájl PostgreSQL elfogadja ezt a karaktert, mint rekordelválasztó, akkor meg kell, hogy vigyázzon a szűrés. És abban az esetben a sor vége formátumú DOS-szerű (CR + LF) szűrés van szükség, mert egy sor karakter (0x0D) és egy kocsi vissza karakter (0x0A).

Végrehajtás FoxPro

FoxPro működik memo-mezők átlátszó, úgy, hogy minden erőfeszítést a részét a programozó nem szükséges. Ne felejtse el, hogy a „” jel előtt határoló karakterek:

Listing 1. memo2pg.prg fájlt (FoxPro)

használja wmem Nyissa meg a táblázatot memo-mezők

m.delimiter = chr (9) szimbólum Tab

* Text mező - határoló és védjük a szimbólum „\”

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

* A Memo-mező tovább megvédeni a sor végét jelző karaktert (ASCII-kód 10 és 13)

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

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

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

* Írja az eredményt fájlba, elosztjuk a mező szimbólum, amely tárolja a változó m.delimiter

várjon ablak „helyen”.

Ábra. Munka ablak FoxPro

Ha úgy dönt, hogy a munka egy CSV formátumú, ahelyett, hogy a lap a szeparátor vessző, és az egyes adatmezőket, függetlenül attól, hogy milyen típusú, akkor kell körülvenni simvolom- „idézet”, mint a „””, ami az alapértelmezett. Nos, minden területen, „idézőjelbe” meg kell kétszerezni megszüntetése érdekében speciális értelmezést.

Megvalósítás Python

És itt mi lesz, hogy alkalmazza a tudást alatt felhalmozott méret DBF és FPT fájlokat. Mivel egy teljesen feldolgozni a forgatókönyvet DBF-fájl is biztosított a korábbi cikkben, itt szorítkozunk mely része felelős az adatok vételére a memo mezőben. Ez alapján egy script dbf2pg.py tárgyalt egy korábbi cikkben (lásd. 2. listát). Hozzáteszi feldolgozó területeken írja «M» hurok feldolgozás minden bejegyzést (megfelelő vonalak pirossal kiemelve font):

2. lista töredék dbf2pg.py script, hozzáadott sorok

for i in tartományban (NUM):

ha mezők [i] .type == 'M':

ha mezők [i] .type == 'D':

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

Itt, amikor detektáljuk a mező típusát Memo olvasható értéket kezelik, amely több, az első adatblokk, és a funkciót az úgynevezett elemzés FPT-fájl:

3. lista töredék dbf2pg.py forgatókönyv memo2pg funkció

# Blokk száma transzformáció között

FPT = nyitott (basetabname + '.fpt', 'rb')

# Olvassa el a blokk mérete

blokkméret = int (ORD (fpt.read (1)) * 256 + ORD (fpt.read (1)))

# Oldalazz tetején a adatblokk

# Olvassa el a méret a adatmező

fieldsize = ord (fpt.read (1)) * 16.777.216 + ORD (fpt.read (1)) * 65536 + ORD (fpt.read (1)) * 256 + ORD (fpt.read (1))

# Transcoding, szűrés és így tovább.

adatok = unicode (adatok, 'cp866'). kódolnak ( 'KOI8-R')

adatok = data.replace ( '\ x0a', '\\' + '\ x0a')

adatok = data.replace ( '\ x0D', '\\' + '\ x0D')

adatok = data.replace (határoló, '\\' + határoló)

Végül meg kell vigyázni, nyitott bináris módban történjen, és hogy létrehozzák a végén a szöveg a Python nem kerül feldolgozásra újsorokon magad, miért forma helyett minden sor alakult egy print utasítást fogjuk írni a fájlt manuálisan kell:

4. lista töredéke dbf2pg.py script sor a fájlban,

Ennek eredményeként dbf2pg.py már tudja kezelni, és memo-mezőt.

FoxPro nyelv korszerű eszközök dolgozó fájlok (nézne furcsa, ha ez nem igaz), és végezzenek átalakítása DBF fájlt egy másik formátumban c jelent - ez a néhány sornyi kódot. Azonban ez nem számít, ha nem nagyon jó barátok, vagy nem tudja használni valamilyen okból. Bináris formátumot DBF, mint látható, meglehetősen egyszerű és könnyen használható. Tehát, hogy ha szükséges, hogy hajtsák végre a meglévő feldolgozási rögtönzött munkaeszköz nem fog.

Kapcsolódó cikkek