Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php+mysql] Dodanie linijek z pliku TXT do bazy MySQL, jedna linijka z pliku tekstowego = jedno pole w MySQL
tomilipin
post
Post #1





Grupa: Zarejestrowani
Postów: 70
Pomógł: 0
Dołączył: 28.01.2004
Skąd: że znowu ლ(ಠ益ಠლ

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


Mam w pliku tekstowym około 300 linijek danych. Jest to tekst otoczony cudzysłowami, każda linijka kończy się przecinkiem. Poniżej wycinek z pliku:

Kod
"linijka pierwsza - tytuł",
"Opis linijki pierwszej. Bla bla bla.",
"Warszawa",
"Jest to stolica Polski.",
"Komputery",
"Bardzo lubię grać w gry, najlepiej "Tomb Rajder", który jest fajny.",


Muszę to przenieść do bazy MySQL (w tabeli "tekst" mam pola id, tytul, tresc).

Prosta sprawa ale kompletnie nie potrafię operować na plikach (IMG:style_emoticons/default/sad.gif)
Wiem tylko, że to będzie tak:
- linijka 1 = tytul 1
- linijka 2 = tresc 1
- linijka 3 = tytul 2
- linijka 4 = tresc 2
itd.

Jak to zrobić w PHP?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
CTRL
post
Post #2





Grupa: Zarejestrowani
Postów: 133
Pomógł: 8
Dołączył: 23.09.2011
Skąd: Stromiec

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


Ja jestem słabiak, ale zrobiłbym to tak:
Czytamy plik (kiedyś się bawiłem, jakiś fread był od tego)
Robimy explode (przecinki)
Pętla for wykonywana liczba tablicy z explode /2
Dodajemy do bazy linijkę z tablicy taką jaką nam pokazuje for i następnie dodajemy aż do 4.
Nie wiem jak to wytłumaczyć, może spróbuję zrobić ten kod to w edicie dam

Edit:
Poradziłem sobie, został jedynie przecinek na końcu ale to już sobie go wytniesz jakoś
http://m.cezary.pl/test/zpliku.php

Ten post edytował CTRL 25.02.2012, 16:39:51
Go to the top of the page
+Quote Post
tomilipin
post
Post #3





Grupa: Zarejestrowani
Postów: 70
Pomógł: 0
Dołączył: 28.01.2004
Skąd: że znowu ლ(ಠ益ಠლ

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


Od rana nad tym siedzę i są efekty (IMG:style_emoticons/default/smile.gif)

Zrobiłem troszkę inaczej i krócej przy okazji (IMG:style_emoticons/default/smile.gif)

  1. $plik = "plik.txt";
  2. $linijka = file($plik);
  3. $dane = array();
  4.  
  5. foreach($linijka as $wartosc) {
  6. array_push($dane, $wartosc);
  7. }


a potem w pętli usuwam niepotrzebne cudzysłowy z początków a z końców linijek wywalam przecinek, cudzysłów i znaki końca wiersza.
Na razie wyświetlam po dwa na raz, oczywiście zaraz zmienię na wstawianie do bazy danych
  1. for ($i=0;$i<=10;($i+=2)) {
  2. print ltrim(rtrim($dane[$i], "\n\r\,\""), "\"").' - '.ltrim(rtrim($dane[($i+1)], "\n\r\,\""), "\"").'<br/><br/>';
  3. }
Go to the top of the page
+Quote Post
mortus
post
Post #4





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


file() (podobnie jak i file_get_contents()) zda egzamin tylko dla niedużych plików (powiedzmy, że do 50MB). Skoro używasz file() to równie dobrze możesz użyć file_get_contents() i explode(), ta druga funkcja przy okazji usunie przecinki. Pętla foreach i przepisywanie tablicy za pomocą array_push() jest w ogóle zbędne, co więcej funkcja array_push() może tutaj coś poknocić, choć tak na prawdę niczego w tej chwili nie robi. Zamiast tego można posłużyć się pętlą for i w tej pętli wygenerować zapytanie SQL, które powinno być de facto zapytaniem MULTI-INSERT:
  1. $content = file_get_contents('plik.txt');
  2. $data = explode(',', $content);
  3. for($i = 0; $i < count($data); $i += 2) {
  4. // tutaj generujemy zapytanie MULTI-INSERT
  5. }
Zamiast zagnieżdżać rtrim() w ltrim() możesz użyć po prostu trim().

Ten post edytował mortus 25.02.2012, 17:24:32
Go to the top of the page
+Quote Post
Barcelona
post
Post #5





Grupa: Zarejestrowani
Postów: 322
Pomógł: 15
Dołączył: 29.01.2010

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


Takie coś znalazłem:

  1. $plik = file('dane.txt');
  2.  
  3. foreach($plik as $linia) {
  4. $i++;
  5. list($id, $imie, $nazwisko, $wiek) = explode(',', trim($linia));
  6. $wynik = mysql_query("
  7. INSERT INTO ludzie
  8. SET id='$id', imie='$imie', nazwisko='$nazwisko', wiek='$wiek'
  9. ");
  10. if (!wynik) echo "Błąd w linii $i ".mysql_error()." <br />";
  11. }
  12.  
Go to the top of the page
+Quote Post
tomilipin
post
Post #6





Grupa: Zarejestrowani
Postów: 70
Pomógł: 0
Dołączył: 28.01.2004
Skąd: że znowu ლ(ಠ益ಠლ

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


Widzę, że pojawiła się jeszcze prostsza opcja (IMG:style_emoticons/default/smile.gif)
Chociaż mój plik nie jest duży (68KB) to mój skrypt wykonuje się prawie 15 sekund. Jak na jednorazowe użycie to ujdzie... ważne że nie ma timeouta (IMG:style_emoticons/default/wink.gif)
Przypuszczam, że kod użytkownika Barcelona będzie dużo szybszy - wykorzystam przy instalacji całości na serwerze jeśli mój polegnie.

Cały mój projekt dotyczy kompletnie czego innego więc nie mam zamiaru skupiać się na importowaniu danych - ważne, że działa. Niemniej jednak dziękuję za pomoc!

---


Pojawił się jeden mały problem: źle wyświetlane są niektóre znaki, np. niemieckie umlauty albo znak "stopni" (Celsjusza, nie wiem jak to się nazywa).
Plik txt i wszystkie php koduję w utf-8 więc nie wiem dlaczego tak się dzieje... Jakieś wskazówki?
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: 25.08.2025 - 00:10