wczytanie pliku dbf
Rekin - 19-11-2005 23:24
wczytanie pliku dbf
Witam, mam problem. Muszę wczytać dane z pliku dbf. Znalazłem biblioteki ( XbaseJ - niestety wersja płatna, odaz jdbf - nie można ustawić kodowania wczytywanych znaków). Może ktoś zna jakąś inną darmową biblioteczkę, albo używał jdbf i wie jak zrobić kodowanie znaków. Trochę nie mam czasu na napisanie własnej biblioteki. Ale jeśli tu nie znajdę pomocy to nie będę miał innego wyjścia.
Pozdrawiam
-- Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
Jerzy Kaczorek - 19-11-2005 23:24
> mam problem. Muszę wczytać dane z pliku dbf. Znalazłem biblioteki ( > XbaseJ - > niestety wersja płatna, odaz jdbf - nie można ustawić kodowania > wczytywanych > znaków). Może ktoś zna jakąś inną darmową biblioteczkę, albo używał jdbf i > wie > jak zrobić kodowanie znaków. > Trochę nie mam czasu na napisanie własnej biblioteki. Ale jeśli tu nie > znajdę > pomocy to nie będę miał innego wyjścia. >
a przez jdbc nie można?
jerzy
Lukasz - 19-11-2005 23:24
> Trochę nie mam czasu na napisanie własnej biblioteki. Ale jeśli tu nie > znajdę > pomocy to nie będę miał innego wyjścia.
Żebyś nie musiał crackować :))):
Książka "Clipper 5.0 - programowanie dla zaawansowanych"; Cendrowski,
Kozłowski, Wyrodow - Rakowski: dodatek pt. Budowa wewnętrzna wybranych
plików clippera". Możesz też użyć FILEFIX.EXE z Norton Utilities. Sam go
używałem i mam o nim nienajgorsze zdanie. A tu masz struktury odpowiadające
nagłówkowi DBF-a:
/* Offset 0: */
struct DBF_HEADER {
byte signature; /* 03 = dbf, 83 dbf+dbt */
byte year; /* data ost. modyf. y+1900 */
byte month;
byte day;
dword last_rec;
word data_off; /* offset w zbiorze do pierwszego rekordu */
word rec_size; /* rozmiar rekordu */
byte pad[20]; /* nieużywane */
};
/* Offset 32 (0x20) * numer_kolejny_pola (liczony od 1 do n) */
struct DBF_FLD {
char nazwa [11],
typ [1],
zarezerwowane[4],
dlugosc[2], /* dla numeryków: młodszy bajt = rozmiar pola, starszy = miejsca dzies. */
pad[14];
};
Za ostatnią definicją pola są bajty: 0x0D, 0x00. Potem zaraz zaczynają się
dane, choć poprawna jest też baza, w której dane są jeszcze dalej, byle
tylko ich początek był poprawnie wskazany przez DBF_HEADER.data_off.
Każdy rekord ma na początku jeden dodatkowy bajt, który zawiera spację lub
'*'. Gwiazdką oznaczone są rekordy usunięte. Po tym bajcie następują
bezpośrednio dane. Wszystkie dane są zapisywane w ASCII i uzupełniane
spacjami do szerokości pola. Na końcu zbioru dobrze jest dodać jeden
dodatkowy bajt (zwykle Ctrl+Z), choć nie jest to niezbędne, ale ułatwia
życie: np. Norton Commander bez tego bajtu pokazuje o jeden rekord w zbiorze
mniej niż powinien (nie pokazuje ostatniego). Clipper 87 widzi w zbiorze
tyle rekordów, ile wynika z DBF_HEADER.last_rec, natomiast Clipper 5.x tyle,
ile mu wyjdzie z: (rozmiaru_zbioru - data_off) / rec_size.
Witold Buszkiewicz - 19-11-2005 23:24
Użytkownik "Rekin" <twaros@poczta.onet.pl> napisał w wiadomości news:43d5.0000024b.437dca8f@newsgate.onet.pl... > Witam, > mam problem. Muszę wczytać dane z pliku dbf. Znalazłem biblioteki ( > XbaseJ - > niestety wersja płatna, odaz jdbf - nie można ustawić kodowania > wczytywanych > znaków). Może ktoś zna jakąś inną darmową biblioteczkę, albo używał jdbf i > wie > jak zrobić kodowanie znaków. > Trochę nie mam czasu na napisanie własnej biblioteki. Ale jeśli tu nie > znajdę > pomocy to nie będę miał innego wyjścia.
Ja w takim przypadku korzystałem z mostka jdbc:odbc:
conDBF = DriverManager.getConnection("jdbc:odbc:DRIVER={Mic rosoft dBase Driver (*.dbf)}"); Statement stDBF = conDBF.createStatement(); rs = stDBF.executeQuery("SELECT * FROM tabela");
a następnie przekodowywałem:
while(rs.next( )) { pole = Dekodery.Pol1toIso(rs.getBytes("pole")); }
Trzeba jedynie napisać odpowiednią klasę do zmiany kodowania.
pozdrawiam
Witek.
Rekin - 19-11-2005 23:24
> a przez jdbc nie można? > > jerzy >
Problem tkwi w tym, że plik dbf jest generowany przez użytkownika i użytkownik nadaje mu dowolną nazwę. A żeby użyć jdbc muszę udostępnić plik jako źródło odbc. Dlatego, jedynym wyjściem jakie widzę, jest użycie biblioteki do wczytania pliku. Zrobiłem to bez problemu za pomocą xbasej, ale ma limit 5 otwartych plików w sesji, a to stanowczo za mało. Dlatego chyba przystąpię do pisania własnej biblioteki. No chyba że się mylę z tym źródłem odbc.
Pozdro Rekin
-- Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
Jan Słupicki - 19-11-2005 23:24
> Witam, > mam problem. Muszę wczytać dane z pliku dbf. Znalazłem biblioteki ( > XbaseJ - > niestety wersja płatna, odaz jdbf - nie można ustawić kodowania > wczytywanych > znaków). Może ktoś zna jakąś inną darmową biblioteczkę, albo używał jdbf i > wie > jak zrobić kodowanie znaków. > Trochę nie mam czasu na napisanie własnej biblioteki. Ale jeśli tu nie > znajdę > pomocy to nie będę miał innego wyjścia.
Ja używam JavaDBF. Tylko musiałem ją trochę zmodyfikować aby radziła sobie z polami MEMO. Przy otwieraniu pliku podajesz z jakiego charsetu ma korzystać i nie ma problemu z polskimi znakami. Jest na tyle prosta że nawet jak czegoś nie ma (jak pole MEMO lub radzenie sobie z uszkodzonymi plikami - miałem do czynienia z plikami w których niektóre pola numeryczne zawierały np. '(*' ) to łatwo jest ją zmodyfikować na własne potrzeby.
-- Jan Słupicki
Jerzy Kaczorek - 19-11-2005 23:25
> Problem tkwi w tym, że plik dbf jest generowany przez użytkownika i > użytkownik > nadaje mu dowolną nazwę. A żeby użyć jdbc muszę udostępnić plik jako > źródło > odbc. Dlatego, jedynym wyjściem jakie widzę, jest użycie biblioteki do > wczytania > pliku. Zrobiłem to bez problemu za pomocą xbasej, ale ma limit 5 otwartych > plików w sesji, a to stanowczo za mało. Dlatego chyba przystąpię do > pisania > własnej biblioteki. > No chyba że się mylę z tym źródłem odbc. > w wypadku dbf-ów jako źródło pokazujesz katalog. Tak więc jeśli użytkownik generuje plik o dowolnej nazwie ale do określonego katalogu to nie powinno by problemu, chyba, że wybiera również katalog.
Kai - 20-11-2005 18:48
On Sat, 19 Nov 2005 14:39:22 +0100, Jan Słupicki wrote:
> Ja używam JavaDBF. Tylko musiałem ją trochę zmodyfikować aby > radziła sobie z polami MEMO. Przy otwieraniu pliku podajesz z jakiego
A czy byłaby możliwość udostępnienia przez Ciebie tych modyfikacji dotyczących MEMO na LGPL? :)
-- ** In the Light Universe *** Kai - Robert Jaros ** * I have been darkness, * kai@startrek.pl * * Perhaps in the Dark Zone * http://www.startrek.pl * ** I will be light ... *** GG:2028007 **
twaros@poczta.onet.pl - 20-11-2005 18:48
> Przy otwieraniu pliku podajesz z jakiego > charsetu ma korzystać i nie ma problemu z polskimi znakami.
Napisałem wszystko. Ładnie działa, ale nie wiem jak podać z jakiego charsetu ma kożystać. Nie wiem jak to podać przy otwieraniu pliku.
Pomożesz?
Pozdro Rekin
-- Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
twaros@poczta.onet.pl - 20-11-2005 18:48
> > Przy otwieraniu pliku podajesz z jakiego > > charsetu ma korzystać i nie ma problemu z polskimi znakami. > > Napisałem wszystko. Ładnie działa, ale nie wiem jak podać z jakiego charsetu ma > kożystać. Nie wiem jak to podać przy otwieraniu pliku. > > Pomożesz? > > Pozdro > Rekin > > -- > Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
Sora, już znalazłem. Testuje.
-- Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
Jan Słupicki - 23-11-2005 11:06
>> Ja używam JavaDBF. Tylko musiałem ją trochę zmodyfikować aby >> radziła sobie z polami MEMO. Przy otwieraniu pliku podajesz z jakiego > > A czy byłaby możliwość udostępnienia przez Ciebie tych modyfikacji > dotyczących MEMO na LGPL? :) >
Mogę ci przesłać jak chcesz - na licencji "rób co chcesz" :-). Tylko to "radzenie" sobie polega na tym że dla pola MEMO dostajesz tablicę bajtów z zawartością tego pola w pliku DBF. Na własną rękę musisz sobie radzić z interpretacją tych bajtów i odczytaniem z pliku FPT. Zapisywania nie ruszałem (nawet nie zaglądałem) więc prawdopodobnie nie będziesz mógł modyfikować plików z polami MEMO. Podsumowując kto chce moje modyfikacje to niech napisze na priv. zapotrzebowanie :-)
-- Jan Słupicki
Kai - 29-11-2005 10:12
On Sun, 20 Nov 2005 20:16:01 +0100, Jan Słupicki wrote:
> Zapisywania nie ruszałem (nawet nie zaglądałem) więc prawdopodobnie > nie będziesz mógł modyfikować plików z polami MEMO.
A to szkoda miałem nadzieję na zapisywanie właśnie ;)
-- ** In the Light Universe *** Kai - Robert Jaros ** * I have been darkness, * kai@startrek.pl * * Perhaps in the Dark Zone * http://www.startrek.pl * ** I will be light ... *** GG:2028007 **
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
używam czcionki wielkości 1296 pt na pliku o wielkości 800x600
=?iso-8859-2?q?Pro=B6ba_o_konwersj=EA_pliku_CDR_do_wersji_11_ lub_ni=BFszej?=
[MySQL]: Odzyskanie z pliku zawierającego wiele baz danych tylko jednej wybranej bazy
Skrypt przeszukujacy dwa pliki tekstowe i dopisujacy zadane znaki do drugiego pliku
=?iso-8859-2?Q?Program_do_kompresji_JPG_z_podaniem_wielko=B6c i_pliku?=
=?iso-8859-2?q?Eksport_do_pliku_z_nag=B3=F3wkami_kolumn?=
[MS SQL 2005 EX] Podmiana pliku bazy danych
import danych z pliku txt do Oracle-10g problem daty
Jak wyciągnąć fragment grafiki (klatka, kilka sekund video) z pliku
[PHP] wysylanie pliku na serwer, a inkrementacja nazwy plikow
zanotowane.pldoc.pisz.plpdf.pisz.pltejsza.htw.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|