Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: przeszukiwanie pliku
Forum PHP.pl > Forum > Przedszkole
xmarko
mam taki format zapisu w pliku :
Kod
1/SYS|$$|wejscie|$$|droga|$$|ip|$$|
bbbbb|$$|2/SYS|$$|droga3|$$|ip5|$$|

Piszę skrypt do sprawdzenia czy wystepuje zapis w pliku
Oto skrypt
  1. <?php
  2.  
  3. $plik_nazwa = &#092;"wyst_karty.dat\" ;
  4. $numer = &#092;"2/SYS\" ;
  5.  
  6.  
  7. $tablica = file($plik_nazwa);
  8.  
  9. for ($i=; $i < count($tablica); $i++)
  10. {
  11. $tab = explode (&#092;"|$$|\",$tablica[$i]);
  12.  
  13. for ($ii=; $ii < count($tab); $ii++)
  14. {
  15. if (in_array($numer , $tab[$ii]))
  16. {
  17. echo &#092;"taki numer karty już isnieje - popraw\";
  18. $numer=$numer+1;
  19. break;
  20.  
  21. }
  22. else 
  23. {
  24.  echo &#092;"nie ma\";
  25.  break;
  26.  } 
  27. } } 
  28.  
  29.  
  30. ?>

Skrypt ma za zadanie sprawdzić w każdej lini czy jest w niej zawarty zapis w zmiennej $numer.
Zmienna $numer może pojawiac się w róznym miejscu lini.
Niestety skrypt nie działa , Nie mam pojęcia gdzie i w jaki sposób należy go zmodyfikować .
Prosze o pomoc . Z góry dziękuję.
nospor
Oto poprawki:
  1. <?php
  2.  
  3. $plik_nazwa = &#092;"wyst_karty.dat\" ;
  4. $numer = &#092;"2/SYS\" ;
  5.  
  6.  
  7.     $tablica = file($plik_nazwa);
  8.  
  9.     for ($i=; $i < count($tablica); $i++)
  10.     {
  11.     $tab = explode (&#092;"|$$|\",$tablica[$i]);
  12.     
  13.     //for ($ii=0; $ii < count($tab); $ii++)  //tu 
  14.         {
  15.             if (in_array($numer , $tab)) //i tu
  16.             {
  17.             echo &#092;"taki numer karty już isnieje - popraw\";
  18.             $numer=$numer+1;
  19.             break;
  20.             
  21.             }
  22.             else 
  23.                     {
  24.                      echo &#092;"nie ma\";
  25.                      break;
  26.                      } 
  27.     }    } 
  28.  
  29.  
  30. ?>


lub:

  1. <?php
  2.  
  3. $plik_nazwa = &#092;"wyst_karty.dat\" ;
  4. $numer = &#092;"2/SYS\" ;
  5.  
  6.  
  7.     $tablica = file($plik_nazwa);
  8.  
  9.     for ($i=; $i < count($tablica); $i++)
  10.     {
  11.     $tab = explode (&#092;"|$$|\",$tablica[$i]);
  12.     
  13.     for ($ii=; $ii < count($tab); $ii++)
  14.         {
  15.             if ($numer==$tab[$ii])//tu
  16.             {
  17.             echo &#092;"taki numer karty już isnieje - popraw\";
  18.             $numer=$numer+1;
  19.             break;
  20.             
  21.             }
  22.             else 
  23.                     {
  24.                      echo &#092;"nie ma\";
  25.                      break;
  26.                      } 
  27.     }    } 
  28.  
  29.  
  30. ?>
hwao
  1. <?php
  2.  
  3. for ($i=; $i < count($tablica); $i++)
  4. // nie tak duzo lepiej tak
  5. for ($i=, $loop = count($tablica); $i < $loop; $i++)
  6. ?>
xmarko
Niestey coś nie działa , tzn skrypt pokazuje że nie znalazł - "nie ma".
Oto trochę zmodyfikowane skrypty (pętla za dużo razy była wykonywana)
  1. <?php
  2. $nazwa_plik = &#092;"wyst_karty.dat\" ;
  3. $numer = &#092;"2/SYS\";
  4.  $tablica = file($nazwa_plik);
  5.  
  6. ?>

  1. <?php
  2.  
  3. for ($i=; $i < count($tablica); $i++)
  4. {
  5. $tab = explode (&#092;"|$$|\",$tablica[$i]);
  6.  
  7. //for ($ii=0; $ii < count($tab); $ii++) //tu
  8. {
  9. if (in_array($numer , $tab)) //i tu
  10. {
  11. echo &#092;"taki numer karty już isnieje - popraw\";
  12.  
  13. break;
  14.  
  15. }
  16. else
  17. {
  18.  echo &#092;"nie ma <br />\";
  19.  break;
  20.  }
  21. } break; }
  22.  
  23.  
  24.  
  25. ?>

  1. <?php
  2.  
  3. for ($i=; $i < count($tablica); $i++)
  4. {
  5. $tab = explode (&#092;"|$$|\",$tablica[$i]);
  6.  
  7. for ($ii=; $ii < count($tab); $ii++)
  8. {
  9. if ($numer==$tab[$ii])//tu
  10. {
  11. echo &#092;"taki numer karty już isnieje - popraw\";
  12.  
  13. break;
  14.  
  15. }
  16. else
  17. {
  18.  echo &#092;"nie ma <br />\";
  19.  break;
  20.  }
  21. } break; } 
  22.  
  23. ?>

Może ktoś ma pomysł na zmodyfikowanie tego kodu - do poprawnie działającego?
nospor
skrypcik dziala , bo zanim go zapodalem to spradzielm u siebie

lepsza jest wersja druga, bo dla kazdej linii pokaze rezultat, ze jest lub nie ma
tiraeth
Nie łatwiej sprawdzić foreach'em questionmark.gif a nie bawić się z for'ami ?
xarr
  1. <?php
  2.  
  3. for($i=0, $amount=count($tablica); $i < $amount; $i++){
  4. $tab = explode (&#092;"|$$|\",$tablica[$i]);
  5. foreach($tab as $elem){
  6. if($numer == $elem){
  7.  echo 'znalazlem<br />';
  8. }
  9. else{
  10. echo 'nieznalazlem<br />';
  11. }
  12. }
  13. }
  14.  
  15. ?>


Mam nadzieje ze o to chodzilo smile.gif Pierwszego fora mozna tez zastapic foreachem. Lepiej bedzie smile.gif
xmarko
Zdaje sobie sprawę, że marudzę.
A le może jeszcze raz zapis w pliku np :
Kod

1/SYS|$$|AAAA|$$|BBBB|$$|cccc|$$|
DDDDD|$$|EEEEE|$$|2/SYS|$$|FFFF|$$|
DDDDD|$$|EEEEE|$$|sssss|$$|3/SYS|$$|


  1. <?php
  2.  
  3. $nazwa_pliku = &#092;"wyst_karty.dat\" ;
  4. $numer = &#092;"2/SYS\" ; // przykładowo , można szukać np \"1/SYS\" - podawane przez formularz ($_POST[numer]) 
  5.  
  6. ?>

Założenia skryptu:
$numer może wystepowac w różnych miejscach w pliku,
1)umieszczenie zapisu pliku w tablicy (file),
2) przeszukuje plik linia po lini rozdzielając linijki na człony ( explode("|$$|" , .......),
3) szuka występowania $ numer,
4) jeżeli znajdzie -> echo "znalazłem",
5) jeżeli nie znajduje -> echo "nie występuje",
6) informacja o wyniiku wyszukiwania wyswietlan jest tylko raz dla wszystkich wyników (jeżeli $numer występuje kilka razy -> tylko jedna informacja).

Niestety nie moge sobie z tym poradzić
nospor
pierwsza wersja mego skrypciku to realizowala.
xmarko
Bardzo dziekuję za zainteresowanie tematem i za wszelkie sugestie
Jednak , mam problem
skrypt 1 po wywołaniu wyswietla "nie ma " co oznacza że nie znalazł
Może to problem u mnie - może ktoś jeszcze mógłby sprawdzić ten skrypt?
tiraeth
Czyli: jeżeli gdzieś w pliku znajduje się 2/SYS to wyświetla znalazłem, a jeżeli nie to nie znalazłem, tak?

  1. <?php
  2. $numer = '2/SYS';
  3.  
  4. $fp = fopen('wyst_karty.dat', 'r');
  5. $fr = fread($fp, filesize('wyst_karty.dat'));
  6. fclose($fp);
  7.  
  8. if(preg_match_all($numer, $fr, $zmienna))
  9. {
  10.  echo 'Znaleziono';
  11. }
  12. else
  13. {
  14.  echo 'Nie znaleziono';
  15. }
  16. ?>

Jeżeli o to chodzi...
xmarko
Testowałem te n skrypt:
  1. <?php
  2.  
  3. $plik_nazwa = &#092;"wyst_karty.dat\" ;
  4. $numer = &#092;"2/SYS\" ;
  5.  
  6.  
  7. $tablica = file($plik_nazwa);
  8.  
  9. for ($i=; $i < count($tablica); $i++)
  10. {
  11. $tab = explode (&#092;"|$$|\",$tablica[$i]);
  12.  
  13. {
  14. if (in_array($numer , $tab)) //i tu
  15. {
  16. echo &#092;"taki numer karty już isnieje - popraw\";
  17. $numer=$numer+1;
  18. break;
  19.  
  20. }
  21. else
  22. {
  23.  echo &#092;"nie ma\";
  24.  break;
  25.  }
  26. } }
  27.  
  28.  
  29. ?>

Prawie działa, tak jak bym chciał, ale wydaje mi się że sprawdza tylko pierwszą linię pliku.
Pozostałe zostają nie sprawdzane.
Może ktoś pomoże mie zmodyfikowąc ten skrypt tak aby sprawdzane były wszystkie linie tablicy?
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.