Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyszukiwanie i usuwanie
Forum PHP.pl > Forum > Przedszkole
katomasz
Jak stworzyć kod, który znajdzie wyraz w pliku i usunie cały wiersz z tym wyrazem?
Odstępy pomiędzy wyrazami tworzsone są tabulatorem, natomiast pomiędzy wierszami znakami nowego wiersza i powrotem karetki.
strife
Hmm... może tak wczytujesz plik do tablicy file" title="Zobacz w manualu PHP" target="_manual, potem w pętli foreach" title="Zobacz w manualu PHP" target="_manual ustawiasz warunek jeśli taki wyraz się pojawił to pomija tą linijke dzieki temu zostaje usunięta.

zarys...
  1. <?php
  2.  
  3. $plik = file('plik.txt');
  4. $wyraz = 'cos'; // wyraz ktory szukasz
  5. foreach($plik as $z)
  6. {
  7.  
  8. if (!ereg($wyraz, $z))
  9. {
  10. $array[] = $z;
  11. }
  12.  
  13. }
  14.  
  15. ?>
katomasz
Zrobiłem w sumie tak
  1. <?php
  2.  
  3. $wyraz=$_GET['usun'];
  4. $plik=file('users.dat');
  5. foreach($plik as $tab)
  6. {
  7.  if (!ereg($wyraz, $tab))
  8. {
  9. $array[]=$tab;
  10. }
  11.  else
  12. {
  13. print $tab;
  14. $file=fopen(&#092;"users.dat\", 'wb');
  15. substr_replace($tab, &#092;"asa\", $file);
  16. }
  17. }
  18. ?>

Wypisuje mi tylko tę linijkę, w której znajduje się wyraz jako zmienna $wyraz. Niestety usuwane są wszystkie dane, chociaż deklaruję zamianę tego ciągu w pliku users.dat na ciąg 'asa'. Co zrobić żeby zamieniało tylko ten ciąg?
strife
Na szybko...
  1. <?php
  2.  
  3. $wyraz = $_GET['usun'];
  4. $plik = file('data.txt');
  5. foreach($plik as $tab)
  6. {
  7.  if (!ereg($wyraz, $tab))
  8. {
  9. $array[] = $tab;
  10. }
  11.  else
  12. {
  13. // $file = fopen(\"data.txt\", 'w');
  14. $new = substr_replace($tab, &#092;"chuj\", $file);
  15. $array[] = $new;
  16.  
  17. }
  18. }
  19.  
  20. $open = fopen('data.txt', 'w');
  21.  
  22. foreach($array as $z)
  23. {
  24.  
  25. $string .= $z;
  26.  
  27. }
  28. $save = fwrite($open, $string);
  29. fclose($open);
  30.  
  31.  
  32. ?>
katomasz
Niestety, ale to też nie działa. Jeżeli są dwie linie to jest to dobrze, lecz, gry pojawią się trzy lub więcej usuwa albo wszystkie od znalezionej, albo wszystkie oprócz ostatniej (nie ma reguły).
Na chwilę obecną mam taki kod
  1. <?php
  2.  
  3. $usun=$_GET['usun'];
  4. $plik=file(&#092;"nazwy.dat\");
  5. $licznik=count($plik);
  6.  for ($i=0; $i<$licznik; $i++)
  7.  {
  8. $wiersz=explode(&#092;"t\", $plik[$i]);
  9. $usun1=trim($wiersz[0]);
  10. if ($usun1==$usun)
  11.  {
  12. $usun=$usun.&#092;"rn\";
  13. $file=fopen(&#092;"nazwy.dat\", \"r+\");
  14. $file1=fread($file, filesize(&#092;"nazwy.dat\"));
  15. $zamiana=str_replace($usun, &#092;" \", $file);
  16. fclose($file);
  17.  }
  18. else
  19. {
  20. print $usun.&#092;" - \";
  21. print &#092;"to nie ten wiersz\";
  22. print &#092;" - \".$wiersz[0].\"<BR>\";
  23. }
  24.  }
  25.  
  26. ?>

wszystko działa oprócz oczywiście usuwania z pliku ciągu $usun (zamiany na spację). Podczas porównania warunek jest spełniany i wchodzi w warunek. Ale niestety nie usuwa. Nie chcę przepisywać całego pliku bez tej właśnie linii, ponieważ nie wydaje mi się to ekonomiczne.
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.