Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wyszukiwanie i usuwanie, danych z pliku
katomasz
post 24.05.2005, 12:43:10
Post #1





Grupa: Zarejestrowani
Postów: 49
Pomógł: 0
Dołączył: 20.05.2005

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


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.
Go to the top of the page
+Quote Post
strife
post 24.05.2005, 13:03:40
Post #2





Grupa: Przyjaciele php.pl
Postów: 2 605
Pomógł: 96
Dołączył: 22.10.2004
Skąd: UK

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


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


--------------------
Go to the top of the page
+Quote Post
katomasz
post 24.05.2005, 13:52:25
Post #3





Grupa: Zarejestrowani
Postów: 49
Pomógł: 0
Dołączył: 20.05.2005

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


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?
Go to the top of the page
+Quote Post
strife
post 24.05.2005, 14:19:03
Post #4





Grupa: Przyjaciele php.pl
Postów: 2 605
Pomógł: 96
Dołączył: 22.10.2004
Skąd: UK

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


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


--------------------
Go to the top of the page
+Quote Post
katomasz
post 27.05.2005, 07:20:54
Post #5





Grupa: Zarejestrowani
Postów: 49
Pomógł: 0
Dołączył: 20.05.2005

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


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.

Ten post edytował katomasz 31.05.2005, 06:35:00
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 Wersja Lo-Fi Aktualny czas: 8.07.2025 - 03:22