Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: import pliku text
Forum PHP.pl > Forum > Bazy danych > MySQL
elj
Witam
Mam problem jak ustawić typ kolumny żeby prawidłowo został zaimportowany plik textowy, gdzie są zawarte liczby zmiennoprzecinkowe (z przecinkiem).
Gdy ustawiam kolumnę na np. decimal (dł. jedno miejsce po przecinku) to zamiast dziesiętnej mam po kropce 0. Gdy ustawiam kolumnę na tekst import jest prawidłowy, czyli cała liczba i po przecinku dziesietną.
Druga opcja nie za bardzo mi odpowiada do dalszych działań matemat. typu sortowanie, np jak jest 999,4 i 1001,5 to po sortowniu twierdzi że pierwsza jest większa od drugiej, bo z 1001,5 tak jakby przesuwał przecinek i wychodzi 1,001.5
Chyba że jest jakis sposób na traktowanie liczby z kolumny text jako liczby zmienoprzcinkowe?
pozdr. elj
SongoQ
Zle sortuje poniewaz sortuje po polu tekstowym, zrob konwersje.
mhs
rozwiazan w Twoim przypadku (w zaleznosci od tego jak dokladnie wyglada plik, z ktorego importujesz dane)

przykladowe rozwiazanie jest nastepujace

jezeli przecinek w Twoim pliku wystepuje tylko jeden raz (do oddzielenia wartosci dziesietnych) mozesz zrobic to w nastepujace sposob
1) wykorzystac narzedzie dostarczane wraz z systemem zarzadzania baza danych o nazwie replace (znajduje sie w katalogu bin) i zamienic kropke na przecinek i strumien wyjsciowy przekierowac do drugiego pliku

Kod
replace "," "." < c:\dane.txt > c:\dane2.txt


2) nastepnie majac tak przygotowane dane mozesz bez problemu importowac do bazy danych

Kod
mysql -u root -e "LOAD DATA INFILE 'c:\dane2.txt' INTO TABLE test.import  FIELDS TERMINATED BY ';'"


#) przykladowy plik zrodlowy jest nastepujacy
Kod
1;1,2343
2;112,123213
3;1212,23
4;123121,123



inne rozwiazanie to napisanie skryptu ktory pobierza zawartosc pliku a nastepnie doda do tabeli odpowiednie wartosci

napisz jak duzy masz ten plik, podaj kilka przykladowych wierszy - wowczas cos wiecej bede mogl doradzic i napisac
elj
Mój plik

Kod
Data i czas    Nr seryjny    T1    T2    RH1    RH2    P1    P2
2003.09.01 13:46:00    75    ----    ----    ----    ----    999,3  999,3
2003.09.01 14:13:00    75    ----    ----    ----    ----    999,5  999,5
2003.09.01 14:43:00    75    ----    ----    ----    ----    999,2  999,2

............

Kod
2003.11.29 20:54:00    75    ----    ----    ----    ----    1005,9  1005,9
2003.11.29 21:24:00    75    ----    ----    ----    ----    1005,9  1005,9

dane są zapisywane z zewnetrznego programu co pół godziny, a więc jest spory, co miesiąc plik jest urywany i tak od początku...

Czy mozna (jak) przy imporcie zrobić konwersję z przecinka na kropkę? Może tak będą prawidłowo zapisywane dane.
Jeszcze jedno: w drugim pliku
Kod
Data i czas    Nr seryjny    T1    T2    RH1    RH2    P1    P2
2003.09.01 13:45:00    1116    20,5    20,5    64,1    64,1    ----    ----
2003.09.01 14:12:00    1116    20,5    20,5    63,7    63,7    ----    ----

dla pola text operacje matematyczne są wykonywane prawidłowo (?)
a dla pierwszego pliku gdy przekraczmy 1000,0 (magiczna liczba) to już traktuje to jako 1 (questionmark.gif?).
pozdro.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.