Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> import TXT -> MySQL, okolo 600 plikow
stg
post
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
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
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
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.
Go to the top of the page
+Quote Post
stg
post
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
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 05:27