Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wczytanie złożonych danych z pliku tekstowego do kilku tabel
Forum PHP.pl > Forum > PHP
comzit
Mam plik tekstowy z danymi. Każdy wiersz ma kilkanaście pól, pola są oddzielone znakiem np. ^ . Muszę teraz z każdego wiersza wybrać określone pola i wstawić je do różnych tabel w bazie. Pierwsze dwa pola do jednej tabeli, 4 kolejne do innej a kilka innych pól do trzeciej tabeli. Przy czym np. pierwsze 2 pola w całym pliku mają tylko 3 różne wartości (w pozostałych wierszach się powielają). Podobnie jest w pozostałych polach.
Wczytałem plik, rozbiłem na wiersze i pola, ale teraz nie wiem jak to wszystko pogrupować i zrobić z tego 3 zapytania do bazy.
Pilsener
Sprawa dla mnie jest prosta, parsujesz plik:
  1. $uchwyt = fopen($pliczek,'r');
  2. while(!feof($uchwyt)){
  3. if(fgets($uchwyt)){
  4. //tu obrabiasz konkretną linijkę z pliku
  5. }
  6. }
  7. fclose($uchwyt);


I dzielisz dane na kilka plików w układzie takim, jakim chcesz to mieć (kwestia odpowiednio dobranych instrukcji warunkowych w pętli while), następnie każdy z tych plików dodajesz do bazy zapytaniem LOAD DATA INFILE.
comzit
Dzięki za chęć pomocy ale tyle to ja wiem. Nie wiem jak porozbijać jedną linijkę na kilka rożnych zmiennych tak aby można je potem było przypisać do zapytania SQL.

Może bardziej sprecyzuje pytanie. Nie chodzi mi o zwykłe odczytanie pliku tekstowego.
Wiersz w pliku powiedzmy wygląda tak:
^id_marki^marka^nazwisko^rok^miasto^cos_tam1^cos_tam2^cos_tam3^
Ponieważ plik nie jest wielki (kilkadziesiąt kilobajtów) i będzie wczytywany raz na tydzień wczytuję go od razu w całości do tablicy.

Nie wiem tylko:

id_marki i marka muszę wczytać do tabeli , ale może być potrzeba dodania rekordu, aktualizacji lub jego usunięcia, w dodatku te dane powielają się w całym pliku (są tylko 3 unikalne wartości).

Podobnie jest przy kolejnych dwóch tabelach. Tylko, że tam jeden rekord zawiera 4 lub 7 różnych wartości, przy czym jedna tabela zawiera dane które już występują w innych tabelach (są to identyfikatory).
Pilsener
Użyj explode:
  1. list($id_marki,$marka,$nazwisko,$rok) = explode("^",$linia_pliku);
- teraz sobie zmienne np. $marka zapisuj do oddzielnych plików i ustaw takie warunki, jakie chcesz

Cytat
może być potrzeba dodania rekordu, aktualizacji lub jego usunięcia
- dodanie lub aktualizację załatwisz zapytaniem REPLACE, natomiast klucze rekordów które masz usunąć wrzucasz do oddzielnej tablicy, potem wystarczy proste zapytanie: delete from tabela where klucz in(1,2,34,56,...)
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.