![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 243 Pomógł: 0 Dołączył: 30.11.2003 Ostrzeżenie: (0%) ![]() ![]() |
Administruję systemem działającym w oparciu o tabele MySQL. Pojawił się
pomysł rozbudowy go o funkcję, polegającą na: 1. wczytaniu na serwer pliku .txt o określonej strukturze, 2. imporcie danych z tego pliku do określonej tabeli bazy, 3. analizy tych danych pod jakimśtam kątem. O ile z 1. i 3. sobie poradzę, o tyle nie bardzo wiem, w jaki sposób: - sprawdzić, czy plik txt ma odpowiednią strukturę (tekst rozdzielany średnikami, odpowiedni typ danych w kolumnach etc), - zaciągnąć dane z pliku do odpowiedniej tabeli - przy czym chodzi tu o zwykły INSERT INTO, ale z użyciem WHERE (importowane mają być rekordy, które spełniają określone kryterium). Pomóżcie. Linki do jakichś przykładów też mile widziane. Pozdrawiam, K |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 697 Pomógł: 47 Dołączył: 19.12.2003 Skąd: Lublin Ostrzeżenie: (0%) ![]() ![]() |
-------------------- Warsztat: Kubuntu, PhpStorm, Opera
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 243 Pomógł: 0 Dołączył: 30.11.2003 Ostrzeżenie: (0%) ![]() ![]() |
To rzeczywiście bardzo uporządkowany opis czynności, które trzeba wykonać żeby "po bożemu" uploadować plik na serwer. Jednak wciąż nie mam rozwiązania problemu analizy jego treści.
Jak sprawdzić, czy w kolumnach są dane odpowiedniego typu? Jak sprawdzić, czy kolumn jest tyle ile trzeba? Jak wczytać do bazy tylko te rekordy, które spełniają określone kryterium? (wczytywanie wszystkiego a potem kasowanie z poziomu bazy to chyba nie najlepszy pomysł...) ![]() ![]() ![]() ![]() ![]() ![]() Pozdrawiam, K |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 11 Pomógł: 0 Dołączył: 20.09.2004 Skąd: Wrocław vs Opole Ostrzeżenie: (0%) ![]() ![]() |
Cytat wczytywanie wszystkiego a potem kasowanie z poziomu bazy to chyba nie najlepszy pomysł.. Fakt to fatalny pomysł ![]()
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 243 Pomógł: 0 Dołączył: 30.11.2003 Ostrzeżenie: (0%) ![]() ![]() |
Ja póki co zrobiłem to tak:
Ale powyższy kod nie zabezpiecza przed niebezpiecznymi znakami w pliku .txt, ani przed jego niewłaściwą strukturą... ![]() ![]() Krzysiek Ten post edytował ktuvok 21.09.2004, 12:58:33 |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 11 Pomógł: 0 Dołączył: 20.09.2004 Skąd: Wrocław vs Opole Ostrzeżenie: (0%) ![]() ![]() |
No to napisz jaką strukturę ma ten plik.txt (wiem ze mniej wiecej widac po skrypcie, ale wole wiecej niz mniej;)... sądzę ze mozna by to dosc sprawnie osiągnąć przez dopasowywanie wzorców (np preg_match() )
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 243 Pomógł: 0 Dołączył: 30.11.2003 Ostrzeżenie: (0%) ![]() ![]() |
Zakładana prawidłowa struktura jest następująca:
ID - INT(11) - (pole będzie pomijane) KodProduktu - VARCHAR(32) - wyłącznie cyfry i spacje Saldo - DOUBLE(6,2) - kwota w formacie "0.00" DataWpisu - DATETIME - data/godzina w formacie: "2004-09-21 14:24:33" Do bazy mają być zaciągnięte tylko te rekordy, dla których Saldo > 0. Poszczególne wartości będą ujęte w cudzysłowy, pola rozdzielone średnikiem. O właśnie - w moim skrypcie zakładam "\t" - czyli rozdzielenie TABulatorem. Jak to zmienić na średnik? Czy "\;" zadziała? No i jak w ogóle sprawdzić, czy plik .txt zawiera dane wczytywalne do bazy? Czyli wiersze z danymi, każdy zakończony znakiem końca linii... Bo jeśli ktoś uploaduje plik zawierający jakikolwiek tekst, to co wtedy?? To chyba tyle... Pozdrawiam, Krzysiek |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 11 Pomógł: 0 Dołączył: 20.09.2004 Skąd: Wrocław vs Opole Ostrzeżenie: (0%) ![]() ![]() |
Cytat $Rekord = explode("\t", $Rekordy[$i]); $Rekord[1] = intval($Rekord[1]; // i tak dla każdego z pól rekordu // No i tutaj przydałaby się weryfikacja wartości... // Ale - czy nie da się prościej?? Jasne że sia da... w php mozna zaprogramowac OPTYMALNIE wszystko co jest związane z wymianą informacji klient - serwer ![]()
Co do średnika,to wystarczy rozdzielić słowa w pliku średnikiem i zmodyfikowac wzorzec (ale myśle że tabulator to bardziej eleganckie rozwiązanie) Pozdrawiam również, Andrzej ![]() ---= edytowane =---- A.. nie doczytałem ze pola mają byc w cudzysłowach - osobiście odradzam - rozdzielenie tabulatorem to moim zdaniem najlepsze rozwiązanie, ale jesli wolisz cudzyszlowy to wzorzec należy deczko zmodyfikować ![]() ------------------------- Ten post edytował walker 21.09.2004, 15:40:28 |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 243 Pomógł: 0 Dołączył: 30.11.2003 Ostrzeżenie: (0%) ![]() ![]() |
Branie wartości w cudzysłowy a oddzielanie to dwie różne kwestie - zobacz np., że phpMyAdmin umożliwia eksport danych w formacie będącym kombinacją i jednej i drugiej opcji...
Czy mógłbyś mi jeszcze napisać, jak zmodyfikować mój i Twój zapis, aby móc tabulator zastąpić średnikiem? Pozdrawiam, Krzysiek |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 11 Pomógł: 0 Dołączył: 20.09.2004 Skąd: Wrocław vs Opole Ostrzeżenie: (0%) ![]() ![]() |
No a moze jeszcze mam ci napisac modul analizy danych co
![]() Po prostu wstaw średniki do pliku a do wzorca podstaw zamiast tabulatorów średniki... to chyba jak sądze możesz zrobić sam ![]() |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 04:12 |