Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] Pobranie linii tekstu, gdzie jest dany unikalny wyraz
Morale
post
Post #1





Grupa: Zarejestrowani
Postów: 152
Pomógł: 2
Dołączył: 28.03.2007

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


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ć ?

Ten post edytował Morale 7.10.2007, 10:37:53
Go to the top of the page
+Quote Post
virto
post
Post #2





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 19.07.2007

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


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".
Go to the top of the page
+Quote Post
Morale
post
Post #3





Grupa: Zarejestrowani
Postów: 152
Pomógł: 2
Dołączył: 28.03.2007

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


Jak to zrobić ? (poprosiłbym o kod, bo próbowałem wielu kombinacji i nigdy mi nie zadziałało (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) )

Ten post edytował Morale 7.10.2007, 10:57:45
Go to the top of the page
+Quote Post
virto
post
Post #4





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 19.07.2007

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


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. ?>


Ten post edytował virto 7.10.2007, 11:00:29
Go to the top of the page
+Quote Post
Morale
post
Post #5





Grupa: Zarejestrowani
Postów: 152
Pomógł: 2
Dołączył: 28.03.2007

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


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."

Ten post edytował Morale 7.10.2007, 11:09:22
Go to the top of the page
+Quote Post
virto
post
Post #6





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 19.07.2007

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


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. ?>
Go to the top of the page
+Quote Post
Morale
post
Post #7





Grupa: Zarejestrowani
Postów: 152
Pomógł: 2
Dołączył: 28.03.2007

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


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.

Ten post edytował Morale 7.10.2007, 11:15:48
Go to the top of the page
+Quote Post
virto
post
Post #8





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 19.07.2007

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


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.

Ten post edytował virto 7.10.2007, 11:16:06
Go to the top of the page
+Quote Post
Morale
post
Post #9





Grupa: Zarejestrowani
Postów: 152
Pomógł: 2
Dołączył: 28.03.2007

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


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


Ten post edytował Morale 7.10.2007, 11:18:15
Go to the top of the page
+Quote Post
virto
post
Post #10





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 19.07.2007

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


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.
Go to the top of the page
+Quote Post
Morale
post
Post #11





Grupa: Zarejestrowani
Postów: 152
Pomógł: 2
Dołączył: 28.03.2007

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


Będzie tylko jeden piesek i jeden kotek (IMG:http://forum.php.pl/style_emoticons/default/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....

Ten post edytował Morale 7.10.2007, 16:22:50
Go to the top of the page
+Quote Post
virto
post
Post #12





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 19.07.2007

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


No nie wiem mi się żaden warning nie pokazał. Żeby nie było:

(IMG:http://img220.imageshack.us/img220/3766/72699378gg3.th.jpg)

A zawartość pliku tekstowego to:

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


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