logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Import 3500 plików TXT o niestandardowej strukturze do bazy MS Access – jak mapować pola?

MCbx 17 Wrz 2007 01:22 6105 4
REKLAMA
  • #1 4291226
    MCbx
    Poziom 28  
    Posty: 1543
    Pomógł: 14
    Ocena: 27
    Mam problem. Zrobiłem sobie w Accessie bazę danych. Muszę do niej zaimportować dane z plików TXT, których jest tak... na oko 3500.
    Kolejnym problemem jest fakt, że pliki te nie mają struktury tabeli, recz raportu.
    Po pierwsze więc muszę jakoś podać scenariusz zgrywania typu "które do którego pola".
    Jak to zrobić? Czy są jakieś programy potrafiące tak importować dane?
  • REKLAMA
  • #2 4291459
    mbo
    VIP Zasłużony dla elektroda
    Posty: 19691
    Pomógł: 2333
    Ocena: 845
    Import z samego Accessa powinien sobie poradzić.
    Zależy to oczywiście od układu tekstu w tych plikach.
  • REKLAMA
  • #3 4292089
    MCbx
    Poziom 28  
    Posty: 1543
    Pomógł: 14
    Ocena: 27
    Import z Accessa działa z plikami, w których są same dane. W moich plikach w liniach, w których są dane są też podpisy i małe tabelki oddzielane znakami "|". To po prostu formularz złożony w ASCII.
    Chyba pomyślę coś nad Turbo Pascalem...
  • REKLAMA
  • #4 4292279
    marek003
    Poziom 40  
    Posty: 4607
    Pomógł: 801
    Ocena: 488
    MCbx napisał:
    Import z Accessa działa z plikami, w których są same dane. W moich plikach w liniach, w których są dane są też podpisy i małe tabelki oddzielane znakami "|". To po prostu formularz złożony w ASCII.
    Chyba pomyślę coś nad Turbo Pascalem...


    To może spróbuj najpierw przekonwertować na pliki excela. Tam podczas konwersji możesz ustawić podział na | ora przydzielić odpowiedni format do danej kolumny
  • #5 4295967
    MCbx
    Poziom 28  
    Posty: 1543
    Pomógł: 14
    Ocena: 27
    Sprawa nieaktualna. Już poradziłęm sobie.
    Progs w Delphi. Na początku trzeba podłączyć do programu bazę danych Accessa przez ADOTable i DataSource. Teraz na formę trzeba wywlec potrzebne pola z listy dostepnej po dwukliku na ADOTable, prawym i Add Fields.

    Następnie kod funkcji:
    function TForm1.getxy(x,y,m:integer):string;
    var tm1, tm2:string;
    var i:integer;
    begin
    IF memo1.Lines.Count<y then begin o:=false; Result:=''; Exit; end;
    IF length(memo1.Lines[y])<x then begin o:=false; Result:=''; Exit; end;
    tm1:=memo1.Lines[y];
    i:=x;
    REPEAT
    i:=i+1;
    tm2:=tm2+tm1[i];
    until (i=x+m) OR (i=length(tm1));
    tm1:='';
    tm2:=Trim(tm2);
    Result:=tm2;
    end;


    Funkcji podaje się argumenty: X, Y, długość, a funkcja daje z Memo1 tekst zaczynający się w punkcie X,Y i o podanej długości. Poza tym funkcja obcina spacje z początku i końca (linia z Trim)

    Teraz tylko coś w rodzaju:

    DBEdit30.EditText:=IntToStr(StrToIntDef(GetXY(67,6,5),0));


    Powyższy przykład ilustruje dane które w bazie danych są typu Integer.
    Jeżeli GetXY natknie się przypadkiem na same spacje i koniec linii może dac nieprzewidziane rezultaty, jak np. "%ŚÇ", Dlatego też dane są konwertowane na Integer, w przypadku śmieci zero. Następnie wartość jest konwertowana na String, by można było ją wpisać do DbEdita.
    Oczywiście gimnastyka taka nie jest potrzebna przy danych które w bazie są już łańcuchem tekstu.

    Teraz tylko to oprogramować przez DBNavigator.BtnClick[nazwaprzycisku], żeby za każdym razem zapisywało i wstawiało nowy rekord po czym umieścić w pętli FOR w zależności od plików otwartych przez OpenDialog (OpenDialog1.files.count - ilość otwartych plików, OpenDialog1.files[x] - ścieżka do pliku nr X) w której plik bedzie ładowany do Memo1, dodawany rekord, pisany rekord, potwierdzany, memo czyszccone itd..

    Może nie optymalne, ale działa :)

    Temat uważam za zamknięty.
REKLAMA