Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Explode ale dwa znaki
Forum PHP.pl > Forum > Przedszkole
BatGraf
Cześć smile.gif
Słuchajcie, mam taki problem:

Mam plik txt o zawartości (to tylko fragment):

  1.  
  2. OPEL ASTRA G coupe (F07_)
  3.  
  4. 2.0 16V Turbo (2000.09 - 2001.08); 1998.00 ccm - 190.00 KM/140.00 kW; Silnik: Z 20 LET
  5.  
  6. 2.0 16V Turbo (2001.08 - 2005.05); 1998.00 ccm - 192.00 KM/141.00 kW; Silnik: Z 20 LET
  7.  
  8. 2.0 16V Turbo (2002.11 - 2005.05); 1998.00 ccm - 200.00 KM/147.00 kW; Silnik: Z 20 LER
  9.  
  10. OPEL ASTRA G hatchback (F48_, F08_)
  11.  
  12. 2.0 16V OPC (1999.11 - 2002.09); 1998.00 ccm - 160.00 KM/118.00 kW; Silnik: X 20 XER
  13.  
  14. 2.0 OPC (2002.09 - 2005.01); 1998.00 ccm - 192.00 KM/141.00 kW; Silnik: Z 20 LET
  15.  
  16. 2.0 OPC (2002.11 - 2005.01); 1998.00 ccm - 200.00 KM/147.00 kW; Silnik: Z 20 LER; Z 20 LET


muszę mieć docelowo w pliku txt wg takiego wzoru:

  1. OPEL ASTRA G coupe (F07_)
  2.  
  3. 2.0 16V Turbo 2000.09 - 2001.08
  4. 1998 ccm
  5. 190 KM
  6. 140 kW
  7. Silnik: Z 20 LET


I teraz co robię:
1. zrobiłem upload pliku na serwer (ma być wczytywany przez formularz) i nadaję mu taką samą nazwę - zawsze jest napisywany - nie ma znaczenia, chodzi o to, że tylko raz był przerobiony i tyle
2. za pomocą explode robię tablicę wg znaku ";"

I wiecej - nie potrafię :|
Powinno jeszcze łamać linię (< br/> czy <p>) w miejscach zaznaczonych poniżej:

OPEL ASTRA G coupe (F07_) (tu)

2.0 16V Turbo (2000.09 - 2001.08); (tu i usuwać () ) 1998.00 ccm - 190.00 KM/ (tu) 140.00 kW; (tu) Silnik: Z 20 LET


Proszę - pomóżcie mi znaleźć rozwiązanie. Nie wiem czy można dać kilka różnych znaków do explode - żeby wycinało np wg : i ) i jak to zapisać z powrotem do pliku txt, żeby łamanie linii było w tych miejscach. Coś czytałem o /n bodajże .


Będę naprawdę bardzo mocno wdzięczny smile.gif Nie czekam na gotowca, bo szukam w goglu już drugi dzień, ale nadajcie ciemniakowi chociaż kierunek biggrin.gif

Z góry dzięki


_______________________

To co do tej pory wypociłem smile.gif :

  1. <?php
  2.  
  3. $plik = file_get_contents("plik.txt");
  4. $tb = explode(';', $plik);
  5.  
  6. for($x = 0; $x < 100; $x++) {
  7.  
  8. echo $tb[$x];
  9. echo "<br />";
  10.  
  11. }
  12.  
  13. ?>
CuteOne
  1.  
  2. $plik = file_get_contents("plik.txt");
  3. $tb = explode(';', $plik);
  4.  
  5. foreach($tb as $key => $value) {
  6.  
  7. $value = strtr(')', '', $value);
  8. $value = strtr('(', '', $value);
  9. $tb[$key]['sub'] = explode('/', $value);
  10. echo '<pre>';
  11. print_r($tb);
  12. }


chyba bedzięsz wiedzial jak to przełożyć na swój przykład
Valdi_B
Poczytaj sobie o funkcji preg_split:
http://pl.php.net/manual/pl/function.preg-split.php
Pierwszym argumentem - "nożem tnącym drugi argument" - jest wyrażenie regułowe.
Wyrażenie regułowe (string) możesz zbudować tak, aby zawierało kilka wariantów:
/[xyz]/ - dowolny ze znaków w nawiasach, w Twoim przypadku chodzi o dwukropek i nawias, a więc: /[:)]/

Inny sposób (jeżeli nie boisz się bardziej zaawansowanych wyrażeń regułowych):
Użyj funkcji preg_match, w takim układzie:
1. W wyrażeniu regułowym trzeba zdefiniować subwzorce (przechwytujące wskazane fragmenty argumentu 2).
2. Cały tekst pokryty wzorcem, a także jego fragmenty pokryte kolejnymi subwzorcami są wstawiane do tablicy - 3-go argumentu preg_match.
3. Wtedy masz dostęp "prostym strzałem" do wskazanych fragmentów wiersza z pliku.
BatGraf
Panowie - dzięki, chyba to mi juz pomoże, głównie preg_split. Teraz potestuję i powiem jak mi wyszło smile.gif

Dzięki

_________

Ok, to pierwsza problema smile.gif
Zrobiłem tak:

  1. <?php
  2.  
  3. $plik = file_get_contents("plik.txt");
  4. $plik1 = trim($plik);
  5. $keywords = preg_split("/;//", $plik1);
  6. echo "<pre>";
  7. print_r($keywords);
  8. echo "<pre>";
  9. ?>


i wywala błąd przez uzycie "/" a wg tego tez chciałbym stosować.

Można zastosować i preg_split i explode? Jakos razem, jednocześnie?
Valdi_B
Pierwsza sugestia:
Zamiast czytać cały plik do stringu, lepiej użyj funkcji file($fn).
Jej wynikiem jest tablica z kolejnymi wierszami.
Dopiero kolejne wiersze pliku (kolejne elementy tej tablicy) przetwarzaj preg_split'em.
Uwaga: Jeżeli plik jest duży, to zamiast wczytania wszystkiego "jednym ruchem" przez file(...) lepiej otwórz plik (fopen(...)), a potem w pętli czytaj wiersz po wierszu (fgets(...)) i od razu przetwarzaj.

Co do: $keywords = preg_split("/;//", $plik1);
Błąd polega na tym, że po średniku dałeś dwa "/".
Pierwszy - to ogranicznik końca wzorca (OK), ale drugi - to już nadmiar, więc preg_split "zaprotestował".

Kolejna uwaga - to wyrażenie regułowe do tego przypadku.
Skoro masz tu wszystkie wiersze w jednym stringu, to najpierw musisz "pociąć" go na poszczególne wiersze, a więc "wyrażeniem tnącym" powinien być '\n'.
Tylko po co taka gimnastyka, skoro tablicę z kolejnymi wierszami daje Ci file(...)?

I na koniec:
trim(...) stosuj indywidualnie do kolejnych wierszy, a nie do całej treści z pliku.
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.