Czym jest plik DBF?
Plik z rozszerzeniem .dbf jest plikiem bazy danych używanym przez aplikację systemu zarządzania bazami danych o nazwie dBASE. Początkowo baza danych dBASE nosiła nazwę Project Vulcan; rozpoczęty przez Wayne’a Ratliffa w 1978 roku. Typ pliku DBF został wprowadzony w dBASE II w 1983 roku. Organizuje on wiele rekordów danych z polami typu Array. Oprogramowanie bazy danych xBase, które jest popularne ze względu na kompatybilność z szeroką gamą formatów plików; obsługuje również pliki DBF.
Format pliku DBF
Format pliku DBF należy do systemu zarządzania bazą danych dBASE, ale może być kompatybilny z xBase lub innym oprogramowaniem DBMS. Początkowa wersja pliku dbf składała się z prostej tabeli, w której można było dodawać, modyfikować, usuwać lub drukować dane przy użyciu zestawu znaków ASCII. Z biegiem czasu .dbf był ulepszany i dodawano dodatkowe pliki zwiększające funkcjonalność i możliwości systemu bazodanowego.
We współczesnym dBASE plik DBF składa się z nagłówka, rekordów danych i znacznika EOF (End of File)
- W nagłówku znajdują się informacje o pliku, takie jak liczba rekordów oraz liczba typów pól użytych w rekordach.
- Zapisy zawierają rzeczywiste dane.
- Koniec pliku jest oznaczony pojedynczym bajtem o wartości 0x1A.
Nagłówek pliku
Układ nagłówka pliku w dBase przedstawia poniższa tabela:
| Bajt | Spis treści | Znaczenie |
|---|---|---|
| 0 | 1 bajt | Prawidłowy dBASE dla pliku DOS; bity 0–2 wskazują numer wersji, bit 3 wskazuje na obecność pliku memo dBASE dla DOS, bity 4–6 wskazują na obecność tabeli SQL, bit 7 wskazuje na obecność dowolnego pliku memo (dBASE m PLUS lub dBASE dla DOS) |
| 1–3 | 3 bajty | Data ostatniej aktualizacji; sformatowany jako RRMMDD |
| 4–7 | liczba 32-bitowa | Liczba rekordów w zbiorze bazy danych |
| 8–9 | liczba 16-bitowa | Liczba bajtów w nagłówku |
| 10–11 | liczba 16-bitowa | Liczba bajtów w rekordzie |
| 12–13 | 2 bajty | Skryty; wypełnij 0 |
| 14 | 1 bajt | Oznaczenie wskazujące na niezakończoną transakcję[uwaga 1] |
| 15 | 1 bajt | Flaga szyfrowania [uwaga 2] |
| 16–27 | 12 bajtów | Zarezerwowane dla dBASE dla DOS w środowisku wielu użytkowników |
| 28 | 1 bajt | Flaga produkcyjnego pliku .mdx; 1 jeśli istnieje produkcyjny plik .mdx, 0 jeśli nie |
| 29 | 1 bajt | Identyfikator sterownika językowego |
| 30–31 | 2 bajty | Skryty; wypełnij 0 |
| 32–n [przypis 3][przypis 4] | 32 bajty każdy | tablica deskryptorów pól (patrz poniżej układ deskryptorów) |
| n + 1 | 1 bajt | 0x0D jako terminator tablicy deskryptorów pól |
- Funkcja ISMARKEDO sprawdza tę flagę (BEGIN TRANSACTION ustawia ją na 1, END TRANSACTION i ROLLBACK resetują ją do 0).
- Jeśli ta flaga jest ustawiona na 1, pojawia się komunikat Baza danych zaszyfrowana.
- Maksymalna liczba pól to 255.
- n oznacza ostatni bajt w tablicy deskryptorów pól.
Tablica deskryptorów pól
Układ deskryptorów pól w dBASE:
| Bajt | Spis treści | Znaczenie |
|---|---|---|
| 0–10 | 11 bajtów | Nazwa pola w ASCII (wypełniona zerami) |
| 11 | 1 bajt | Typ pola. Dozwolone wartości: C, D, F, L, M lub N (znaczenia w następnej tabeli) |
| 12–15 | 4 bajty | Zarezerwowane |
| 16 | 1 bajt | Długość pola w formacie binarnym (maksymalnie 254 (0xFE)). |
| 17 | 1 bajt | Liczba dziesiętna pola w systemie binarnym |
| 18–19 | 2 bajty | Identyfikator obszaru roboczego |
| 20 | 1 bajt | Przykład |
| 21–30 | 10 bajtów | Zarezerwowane |
| 31 | 1 bajt | Flaga pola produkcyjnego MDX; 1 jeśli pole ma znacznik indeksu w produkcyjnym pliku MDX, 0 jeśli nie |
Rekordy bazy danych
Każdy rekord zaczyna się od flagi usunięcia (1-bajtowej). Pola są pakowane w rekordy bez separatorów pól. Wszystkie dane pola są w formacie ASCII. W zależności od rodzaju pola aplikacja nakłada dodatkowe ograniczenia. Oto typy pól w dBase:
| Typ pola | Mnemonik | Co akceptuje |
|---|---|---|
| C | znak | Dowolny tekst ASCII (dopełniony spacjami do długości pola) |
| D | Data | Cyfry i znak oddzielający miesiąc, dzień i rok (przechowywane wewnętrznie jako 8 cyfr w formacie RRRRMMDD) |
| F. | Zmiennoprzecinkowy | -, ., 0–9 (wyrównanie do prawej, wypełnione spacjami) |
| L | logiczne | Y, y, N, n, T, t, F, f lub ? (gdy niezainicjowany) |
| M | Notatka | Dowolny tekst ASCII (przechowywany wewnętrznie jako 10 cyfr reprezentujących numer bloku .dbt, wyrównany do prawej, uzupełniony spacjami) |
| N | Numeryczne | -, ., 0–9 (wyrównanie do prawej, wypełnione spacjami) |