Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> przeszukiwanie pliku, zastosowanie tablic
xmarko
post
Post #1





Grupa: Zarejestrowani
Postów: 59
Pomógł: 0
Dołączył: 26.02.2004

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


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


--------------------
marko
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 11)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


Ten post edytował nospor 17.02.2005, 15:07:22


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
hwao
post
Post #3


Developer


Grupa: Moderatorzy
Postów: 2 844
Pomógł: 20
Dołączył: 25.11.2003
Skąd: Olkusz




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





Grupa: Zarejestrowani
Postów: 59
Pomógł: 0
Dołączył: 26.02.2004

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


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?

Ten post edytował xmarko 18.02.2005, 12:13:26


--------------------
marko
Go to the top of the page
+Quote Post
nospor
post
Post #5





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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

Ten post edytował nospor 18.02.2005, 12:22:02


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
tiraeth
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 1 789
Pomógł: 41
Dołączył: 30.10.2003
Skąd: Wrocław

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


Nie łatwiej sprawdzić foreach'em questionmark.gif a nie bawić się z for'ami ?
Go to the top of the page
+Quote Post
xarr
post
Post #7





Grupa: Zarejestrowani
Postów: 105
Pomógł: 0
Dołączył: 5.12.2004

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


  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
Go to the top of the page
+Quote Post
xmarko
post
Post #8





Grupa: Zarejestrowani
Postów: 59
Pomógł: 0
Dołączył: 26.02.2004

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


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ć


--------------------
marko
Go to the top of the page
+Quote Post
nospor
post
Post #9





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




pierwsza wersja mego skrypciku to realizowala.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
xmarko
post
Post #10





Grupa: Zarejestrowani
Postów: 59
Pomógł: 0
Dołączył: 26.02.2004

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


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?


--------------------
marko
Go to the top of the page
+Quote Post
tiraeth
post
Post #11





Grupa: Przyjaciele php.pl
Postów: 1 789
Pomógł: 41
Dołączył: 30.10.2003
Skąd: Wrocław

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


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

Ten post edytował Tiraeth 18.02.2005, 13:39:20
Go to the top of the page
+Quote Post
xmarko
post
Post #12





Grupa: Zarejestrowani
Postów: 59
Pomógł: 0
Dołączył: 26.02.2004

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


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?


--------------------
marko
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 11:02