Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> import pliku text, przecinek vs. kropka
elj
post
Post #1





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 23.07.2005

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
SongoQ
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

Ostrzeżenie: (0%)
-----


Zle sortuje poniewaz sortuje po polu tekstowym, zrob konwersje.
Go to the top of the page
+Quote Post
mhs
post
Post #3





Grupa: Zarejestrowani
Postów: 764
Pomógł: 3
Dołączył: 30.04.2003

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
elj
post
Post #4





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 23.07.2005

Ostrzeżenie: (0%)
-----


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 ((IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) ?).
pozdro.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.12.2025 - 13:26