Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> import TXT -> MySQL, okolo 600 plikow
stg
post 6.04.2006, 14:57:08
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 5.04.2006

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


Witam

Szukalem w wyszukiwarce i byly tylko tematy o wgrywaniu zawartosci pojedynczego pliku do bazy MySQL, na dodatek o scisle okreslonej strukturze (oddzielone przecinkami, srednikami itp)

Problem polega na tym, ze mam okolo 600 plikow tekstowych o przykladowej nazwie kk353.txt, kk734 itp. Kazdy z tych plikow to normalny plik tekstowy z opisem motocykli (z kropkami i przecinkami, bez srednikow). I nie mam pojecia jak je wgrac automatycznie do MySQL. Wgrywanie reczne oczywiscie odpada, bowiem za duzo czasu to zajmie.

W MySQL mam 4x pola:
- ID (INT), autoincrement
- Nazwa (VARCHAR), ktora stanowi nazwe pliku bez rozszerzenia (np. kk353)
- Opis (TEXT), ktory stanowi zawartosc tego pliku (w tym przypadku pliku kk353)
- Kategoria (VARCHAR), np. czesc plikow jest w kategorii Suzuki, a czesc w Kawasaki

LOAD DATA INFILE wgrywa pojedynczy plik. Laczenie wszystkich plikow w jeden odpada, bo rowniez zabierze to zbyt wiele czasu, a poza tym lepiej jest chyba dodawac mniejsze pliki, prawda?

W jaki sposob mozna to zrobic?
Go to the top of the page
+Quote Post
TomASS
post 6.04.2006, 15:03:46
Post #2





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

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


Cytat
LOAD DATA INFILE wgrywa pojedynczy plik.

To zrób albo LOAD DATA INFILE w pętli, albo (co jest wolniejsze) zrób tak:

1. Pętle dla wszystkich plików
2. Wczytujesz plik
3. Bierzesz wiersz
4. Rozbijasz go do woli np. explode
5. Wpisujesz do bazy dane Insertem
6. Kolejna linia
7. Kolejny plik


--------------------
Go to the top of the page
+Quote Post
babejsza
post 6.04.2006, 16:37:09
Post #3





Grupa: Zarejestrowani
Postów: 407
Pomógł: 1
Dołączył: 4.03.2003
Skąd: warszawa

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


Przy założeniu, że wszystkie pliki są w jednym katalogu:

  1. <?php
  2.  
  3. $katalog=opendir("katalog_z_plikami/");
  4. while ($file = readdir($katalog)) {
  5. if ($file!="." and $file!=".."){
  6. $nazwa = explode(".", $file);
  7. mysql_query("LOAD DATA INFILE '$file' INTO TABLE twoja_tabela (Opis) SET Nazwa = '$nazwa[0]'");
  8. }
  9. }
  10.  
  11. ?>


To powinno działać, ale pewien nie jestem bo nie sprawdzałem. Przejżyj sobie dokładniej to load-data

Nie zalapalem o co chodzi z tymi kategoriami. Jeżeli to mają być katalogi o nazwach "Kawasaki", "Suzuki", w których są te pliki txt to zrób jeszcze jedną pętelkę.
Go to the top of the page
+Quote Post
dr_bonzo
post 6.04.2006, 17:04:04
Post #4





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


Pokaz przykladowa zawartosc plikow, czy wszystkie sa w identycznym formacie?

Mozesz najpierw polaczyc pliki w jeden, na linuxie to jest jedno polecenie i potem LOAD DATA IN FILE.


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
stg
post 6.04.2006, 18:59:50
Post #5





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 5.04.2006

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


Oki, polaczylem nazwy plikow (oddzielone przecinkami) w jeden plik:
Kod
#!/bin/sh
nazwy=`ls -m`
cat $nazwy > nazwy


A jak polaczyc same opisy w jeden plik z oddzielajacym znakiem? Nie mam talentu do petelek.

Ten post edytował stg 14.04.2006, 21:22:40
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 13.07.2025 - 12:02