ďťż
 
wczytanie pliku dbf ďťż
 
wczytanie pliku dbf
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • tejsza.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

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com