Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Pobranie linii tekstu, gdzie jest dany unikalny wyraz
Forum PHP.pl > Forum > Przedszkole
Morale
Chciałbym pobrać linię tekstu, w którym znajduje się napis "kotek". Mój kod:

  1. <?php
  2. $tekst = file('plik.txt');
  3. $tekst2 = count($tekst);
  4.  
  5.  
  6. for ($i=0; $i<($tekst2); $i++) {
  7.  
  8.  
  9. $pos = strpos($tekst[$i], 'kotek');
  10.  
  11. if ($pos === false) {
  12. //jesli nie znalazł
  13.  
  14. } else {
  15. //jeśli znalazł
  16. }
  17. ?>


I mam problem, bo chciałbym w tej linii, gdzie znajduje się UNIKALNY wyraz kotek, znaleźć UNIKALNY wyraz piesek. Ale tylko w tej linii, już nie szukać w całym pliku.

I tu pytanie, jak to zrobić ?
virto
No ale przecież funkcja file() zwraca tablice w której każdym elementem jest wiersz danego pliku. Wystarczy w danym obiegu pętli przeszukać ten wiersz i tam poszukać tego "pieska".
Morale
Jak to zrobić ? (poprosiłbym o kod, bo próbowałem wielu kombinacji i nigdy mi nie zadziałało sad.gif )
virto
A tak nie działa?
Jak masz pętle for:

  1. <?php
  2. for ($i=0; $i<($tekst2); $i++) 
  3. {
  4. $pos = strpos($tekst[$i], 'kotek');
  5.  
  6. if ($pos === false) 
  7. {
  8. //jesli nie znalazł
  9. } 
  10. else 
  11.  {
  12.  //jeśli znalazł
  13.  $pos2 = strpos($tekst[$i], 'piesek')
  14. }
  15. ?>
Morale
Ale to jest znów przeszukiwanie po pliku raczej i w twoim kodzie, przeszukiwanie jest tylko kotka, pieska tylko włożyłeś do zmiennej + "strpos() [function.strpos]: Empty delimiter."
virto
Jak po pliku przecież masz wyraźne odwołanie do wiersza pliku:

  1. <?php
  2. for ($i=0; $i<($tekst2); $i++) 
  3. {
  4. $pos = strpos($tekst[$i], 'kotek');
  5.  
  6. if ($pos === false) 
  7. {
  8. //jesli nie znalazł
  9. } 
  10. else 
  11.  {
  12.  //jeśli znalazł
  13.  $pos2 = strpos($tekst[$i], 'piesek')  // ----> $tekst[$i] <---- Wyraźne odwołanie do wiersza
  14. }
  15. ?>
Morale
Jak szukasz kotka, to też masz wyraźne szukanie wiersza. Twój kod wyszukuje pieska i kotka, ale w obojętnie jakich wierszach...

Czyli kod ma tak wyglądać ? :

  1. <?php
  2. $tekst = file('plik.txt');
  3. $tekst2 = count($tekst);
  4.  
  5. for ($i=0; $i<($tekst2); $i++) {
  6.  
  7. $pos = strpos($tekst[$i], 'kotek';
  8.  
  9. if ($pos === false) {
  10. //jesli nie znalazł
  11.  
  12. echo "<center><b>nie ma</b></center><br>";
  13.  
  14.  
  15. } else {
  16. //jeśli znalazł
  17.  
  18.  
  19.  $pos2 = @strpos($tekst[$i], 'piesek');
  20.  
  21.  
  22.  if ($pos2 === false)  {
  23. //jesli nie znalazł
  24.  
  25. echo "<center><b>nie ma</b></center><br>";
  26.  
  27. } else {
  28.  //jeśli znalazł
  29.  
  30. } //strpos piesek
  31.  
  32. } //strpos kotek
  33.  
  34. } //for
  35. ?>



Kod w tej postaci nie działa.
virto
No proszę Cię przecież masz tam pętle, która przeszukuje wiersz po wierszu dany plik, jeśli w danym wierszu znajdzie tekst 'kotek' to szuka 'piesek' w tym samym wierszu. A w ogóle to sprawdzałeś na żywo?

Tak ten kod wyżej wydaje mi sie najsensowniejszy.
Morale
Ale ty myślisz o tym kodzie, który Ci podałem powyżej ? Bo on nie działa. Pisze, że nie istnieje, choć w jednej linii jest:

Cytat
||piesek||kotek||



A dodatkowo, gdy drugiego strposa nie wyciszę małpką to jest taki błąd:

Cytat
Warning: strpos() [function.strpos]: Empty delimiter
virto
Rzeczywiście w moim rozumieniu tego problemu był błąd. Dlatego usiadłem poczytałem i wyskrobałem to:
  1. <?php
  2.  
  3. $plik = file('plik.txt');
  4. $dlugosc = count($plik);
  5.  
  6. for ($i=0; $i<$dlugosc; $i++)
  7. {
  8. $pos = strstr($plik[$i], 'kotek');
  9. if ($pos === false)
  10. {
  11. echo "Odnalezienie podanego słowa niemozliwe.<br />";
  12. }
  13. else
  14. {
  15. echo "Kotek jest w wierszu: ". $j=$i+1;
  16. if (!(strstr($plik[$i], 'piesek')))
  17. {
  18. echo ", ale nie mozna znaleźć Pieska<br />";
  19. }
  20. else
  21. {
  22. echo ", o jest piesek!!!<br />";
  23. }
  24. }
  25. }
  26. ?>


Jednakże jeśli w pętli znajdzie się wiersz ze stringiem 'kotek',a w wierszu jest więcej stringów 'piesek' to funkcja znajdzie tylko ten pierwszy. Głowie się nad tym jakby to zapętlić. Czy jest jakaś funkcja, która wrzuci wiersz do tablicy i podzieli go na elementy tak żeby było ok.
Morale
Będzie tylko jeden piesek i jeden kotek smile.gif

Błąd:

Cytat
Warning: strstr() [function.strstr]: Empty delimiter
Da się go wyciszyć małpką, ale tak jak mówiłem wcześniej nie wyszukuje w podanym wierszu pieska... choć jest.

Z resztą pokazuje się, że nie ma ani kotka ani pieska jednocześnie :| - choć istnieją plus nie wiem po co tworzysz zmienną $j i jej nie wykorzystujesz....
virto
No nie wiem mi się żaden warning nie pokazał. Żeby nie było:



A zawartość pliku tekstowego to:

  1. Zdzisiek kotek
  2. Wiesiek
  3. kotek piesek piesek


Wszystko wydaje mi sie, że jest w porządku.
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.