Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Czy tekst leży pomiedzy dwoma wierszami
Forum PHP.pl > Forum > PHP
Major
A więc tak. Mam dajmy taki tekst
Kod
hjsagdasd
<!-- START cos -->
{cos.HEADER}
<!--END cos -->
fgdgdfg

i nie wiem jak sprawdzic czy element "{cos.HEADER}" lezy pomiedzy "<!-- START cos -->" i "<!--END cos -->"
Może ktos podać jakąś pomocna funkcje lub/i przykladowy kod?
quex
można to zrobić explodem, najpierw wyszukać <!-- START cos -->, a później wyszukać <!--END cos -->, i powinno działać winksmiley.jpg

dodam kod:
  1. <?
  2. $tekst=&#092;"fgdgdfg\";
  3. $tekst.=&#092;"<!-- START cos -->\";
  4. $tekst.=&#092;"{cos.HEADER}\";
  5. $tekst.=&#092;"<!--END cos -->\";
  6.  
  7. $text = explode(&#092;"<!-- START cos -->\", $tekst);
  8. for($x=1; $x < count($text); $x++){
  9. $slowo= explode(&#092;"<!--END cos -->\", $text[$x]);
  10. $szukane_slowo= $slowo[0];
  11. }
  12. ?>


i później sprawdzamy czy ciągi znaków są takie same.
Major
Hmm z tego co patrz ne ten skrypt to on mi wyswietli te szukane słowo tak?
A mi chodzi o to by zwrozilo true albo false w zaleznosci czy znajduje sie pomiedzy tymi wierszami.
quex
no to sprawdzasz
  1. <?
  2. if($szukane_slowo==$slowo_szukane){
  3. $wartosc=&#092;"true\";
  4. } else {
  5. $wartosc=&#092;"false\";
  6. }
  7. ?>


a za zmienną $slowo_szukane podstawiasz to:
Kod
{cos.HEADER}
tiraeth
  1. <?php
  2. function search_in_file($filename, $przed, $searching, $po)
  3. {
  4.  $plik = file_get_contents($filename); // Pobieramy zawartosc pliku
  5.  
  6.  $searching_for = $searching;
  7.  
  8.  if(preg_match(&#092;"/\".$przed.\"n\".$searching_for.\"n\".$po.\"/\", $plik, $array))
  9.  {
  10. // Wartosc zmiennej $searching_for znajduje sie w pliku pomiedzy $przed i $po
  11. return true;
  12.  }
  13.  else
  14.  {
  15.  return false;
  16.  }
  17. }
  18.  
  19. // Przykład użycia
  20. $reading = search_in_file('plik.txt', '<!-- START cos -->', '{cos.HEADER}', '<!--END cos -->');
  21.  
  22. echo ($reading) ? 'Znaleziono' : 'Nie znaleziono';
  23. ?>


nie wiem czy działa... pozdro
smile.gif
Major
A więc zastosowałem metode quex. Można powiedziec ze prawie działa. Przedstawie zawartosc pliku index.tpl
Kod
<!-- BEGIN bum -->
{bum.HEADER}
<!-- END bum -->

i niestety jak jest w powyzszym stanie skrypt mi nie działa, zato jak jest
Kod
<!-- BEGIN bum -->{bum.HEADER}<!-- END bum -->

tak to mi działa ale zato mi to nie pasuje. Ale nie moze byc takze
Kod
<!-- BEGIN bum -->{bum.HEADER}<br><!-- END bum -->

Wiec jeszcze gorzej. Ponizej przedstawiam czesc funkcji ktorej uzywam do kompilacji
  1. <?php
  2.                         $blocks = explode('.', $key);
  3.                         $text = explode(&#092;"<!-- BEGIN $blocks[0] -->\", $code);
  4.                         for($x=1; $x < count($text); $x++)
  5.                         {
  6.                             $slowo= explode(&#092;"<!-- END $blocks[0] -->\", $text[$x]);
  7.                             //print ($slowo[0]);
  8.                             $tag = '{'.$key.'}'; 
  9.                             //print_r ($szukane_slowo).'<br>';
  10.                             //echo $tag.'<br>';
  11.                             $sl = $slowo[0];
  12.                             echo $sl.'<br>';
  13.                             echo $tag.'<br>';
  14.                             if($sl == $tag)
  15.                             {
  16.                                 $code = str_replace($tag, $value, $code); 
  17.                                 echo 'bum';
  18.                                 return $code;
  19.                             } 
  20.                             else 
  21.                             {
  22.                                 echo 'bumaa';
  23.                                 return false;
  24.                             }
  25. ?>


---EDIT----
hmm wymysliłem inny kod
  1. <?php
  2. $code_lines = explode(&#092;"n\", $code);
  3. while(list($key, $value) = each($this->template['.'][0])) 
  4. { 
  5. if(strstr($key,'.'))
  6. {
  7. $tag = '{'.$key.'}';
  8. // Second: prepend echo ', append ' . \"n\"; to each line.
  9. $line_count = sizeof($code_lines);
  10. for ($i = 0; $i < $line_count; $i++)
  11. {
  12. $code_lines[$i] = chop($code_lines[$i]);
  13.  
  14. if (preg_match('#<!-- BEGIN (.*?) -->#', $code_lines[$i]) )
  15. {
  16. print_r ($m);
  17. if (preg_match('#<!-- END (.*?) -->#', $code_lines[$i]))
  18. {
  19. print_r ($m);
  20. $code = str_replace($tag, $value, $code_lines[$i]); 
  21. return $code;
  22. }
  23. }
  24. }
  25. }
  26. }
  27. ?>

Ale on rownierz nie zamienia mi
Kod
<!-- BEGIN bum -->
<font color="red">{bum.HEADER}</font>
<!-- END bum -->

Ale już zamienia mi taki kod
Kod
<!-- BEGIN bum --><font color="red">{bum.HEADER}</font><!-- END bum -->

Bóg zapłać.
DaNTe
Cytat(Major @ 2005-01-14 15:26:56)
i nie wiem jak sprawdzic czy element "{cos.HEADER}" lezy pomiedzy "<!-- START cos -->" i  "<!--END cos -->"

  1. <?php
  2.  
  3. function pomiedzy($mark,$needle,$haystack)
  4. {
  5.   $needle=str_replace('/','/',addshashes($needle));
  6.   return preg_match(&#092;"/<!-- START $mark -->.*?$needle.*<!-- END $mark -->/s\", $haystack);
  7. }
  8.  
  9. pomiedzy(cos, '{cos.HEADER}', $twojtekst)
  10.  
  11. ?>


nie wystarczy questionmark.gif
Major
Ale to bedzie mi dzialac jak bedzie <!-- BEGIN bum --><font color="red">{bum.HEADER}</font><!-- END bum --> Ale juz nie bedzie jak <!-- BEGIN bum -->
<font color="red">{bum.HEADER}</font>
<!-- END bum -->
Wydaje mi sie ze cos nei tak jest z preg_match
tiraeth
1. Czy ty człowieku potrafisz przeczytać wszystkie posty questionmark.gif Część z nich odpowiada w całości na Twoje pytanie ale po części...
2. Oto kod zlepiony z tego topica:
  1. <?php
  2.  
  3. function pomiedzy($mark,$needle,$file)
  4. {
  5.  $plik = file($file);
  6.  $haystack = split(&#092;"n\", $plik);
  7.  
  8.  $needle=str_replace('/','/',addshashes($needle));
  9.  
  10.  return preg_match(&#092;"/<!-- START $mark -->n.*?$needle.*n<!-- END $mark -->/s\", $haystack);
  11. }
  12.  
  13. pomiedzy('cos', '{cos.HEADER}', $plik);
  14. ?>

Wystarczyło dodać \n po pierwszym --> i przed drugim <!--.

Jeżeli sam nie zaczniesz szukać rozwiązania to przykro mi ale nie będziemy dawać Ci gotowców....
Major
Tiraeth, nie denerwuj sie...
Robiłem tak jak mówiles, dodawalem /n do mojego sposobu ale nie działało.
crash
/n to nie to samo co \n
Major
Ehh to była akurat 'literowka' ale wkodzie mialem ok czyli \n
tiraeth
Aby \n było traktowane jako przejście do nowej linii (znak nowej linii) musi być umieszczone w podwójnym cudzysłowiu....
Kod
"\n"
DaNTe
Cytat(Major @ 2005-01-15 15:31:23)
Ale to bedzie mi dzialac jak bedzie

A sprawdziles ? Modyfikator /s powinien zalatwiac sprawe.
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.