Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: usuwanie lini z pliku
Forum PHP.pl > Forum > Przedszkole
Gość_Romek
Potrzebuje zrobic cos takiego: otwieram plik z adresami pocztowymi np. mail.txt ktory jest w formacie
adres@wp.pl blabla
innyadres@onet.pl blabla

Dopisuje same adresy pocztowe do inengo pliku np. inny.txt, w formie

stalyadres@poczta.pl: adres@wp.pl, innyadres@onet.pl

Problem pojawia sie wtedy gdy taki wpis (zaczynajacy sie od stalyadres@poczta.pl) istnieje juz w inny.txt, wowczas skrypt powinien najpierw usunac linie zawierajaca taki wpis, a nastepnie dodac powyzszy wpis, czyli:

stalyadres@poczta.pl: adresy@z.mail.txt.pl, inny_adres@z.mail.txt.pl
Jak to zrobic? worriedsmiley.gif
crash
A poszukać to nie łaska?! http://forum.php.pl/index.php?showtopic=3260
Dodaj do tego sprawdzanie linii (np. w pętli) i już...
Gość_Romek
Narazie zrobilem cos takiego:

Kod
$tablica = file("mail.txt","r");

  foreach($tablica as $linia)
  {
                        
   }


Teraz jak powinien wygladac warunek w petli, jezeli chce zeby poznalezieniu lini ktora zawiera
Kod
stalyadres@poczta.pl:

linia ta byla usuwana?
Gość_Romek
Narazie warunek w petli jest taki:
Kod
if (strstr($linia, "stalyadres@poczta.pl"))
                    unset($linia);
fopen("mail.txt", "a");
fputs($tablica, $linia);
fclose($tablica);


problem lezy w trybie otwarcia fopen() pliku mail.txt, poniewaz wczesniej otwieram go juz przez file() w tybie "r". Jak moge zapisac zmiany w pliku (konkretnie usuniecie jednej lini) z pominieciem tworzenia jakiegos pliku tymczasowego?
phpion.com
Wczytaj plik do tablicy, nastepnie w petli znajdz index tablicy, przy ktorym wartosc bedzie == tej ktora chcesz usunac, nastepnie otworz plik w trybie w+ i wpisz do niego tablice z warunkiem, ktory sprawdzi czy wpisywana linia ma rozny numer (index z tablicy) od tej, ktora chcesz usunac
Guest
Napisalem cos takiego,ale nie dziala:
Kod
                $tablica = file("mail.txt");

                $index = 0;

                foreach($tablica as $linia)
                {
                        if (strstr($linia, "do_usuniecia@onet.pl"))
                                $szukany = $index;
                                //unset($linia);

                        echo $szukany;
                        $index++;
                }

                $fp = fopen("mail.txt", "w+");

                foreach($tablica as $linia2)
                {
                        if ($index != $szukany)
                                fputs($fp, $linia2);
                        else
                                continue;
                }
                fclose($fp);
crash
  1. <?php
  2. $dane = file( 'mail.txt' );
  3.  
  4. foreach( $dane as $idx => $linia )
  5. {
  6.  if( strpos( $linia, 'do_usuniecia@onet.pl' ) === true )
  7.  {
  8. unset( $dane[ $idx ] );
  9.  }
  10. }
  11.  
  12. if( $fp = fopen( 'mail.txt', 'w' ) )
  13. {
  14.  fputs( $fp, implode( '', $dane ) );
  15.  fclose( $fp );
  16. }
  17. ?>
Guest
Dzieki za pomoc.
Zamiast strpos() uzylem strstr() i poszlo. smile.gif
v1t4n
Romciu, a nie lepiej jakbys sobie to zrobil w bazach? No nie wiem jezeli koniecznie na plikach to radzilbym zrobic sobie cos takiego
mail.txt:
  1. <?php
  2.  
  3. $adres1="asd";
  4. $adres2="asdf";
  5.  
  6. ?>


  1. <?php
  2.  
  3. //adres delikwenta :)
  4. $adresss=("wacek-kraweznik@vip.com");
  5.  
  6. //otwieramy licznik adresow
  7. $plik1=fopen("licznik.txt", "r+");
  8.  
  9. //otwieramy plik z adresami
  10. $plik2=fopen("mail.txt", "r+");
  11.  
  12. //pobieramy liczbe z licznika
  13. $numer=fgets($plik1);
  14.  
  15. //pobieramy liste adresow
  16. $adresy=fread($plik2);
  17. $a=1;
  18. $b=1;
  19. while($a < "$numer + 1")
  20. {
  21. while($b < "$numer + 1")
  22. {
  23. if($a ! $b)
  24. {
  25. if($adres$a ! $adres$b)
  26. {
  27. $licznik++;
  28. $adres$licznik=$adresss
  29. fwrite($plik2, $adres$licznik);
  30. fwrite($plik1, $licznik);
  31. fclose($plik1);
  32. fclose($plik2);
  33. }
  34. else
  35. {
  36. echo("Podany adres e-mail juz istnieje w bazie danych")
  37. }
  38. }
  39. }
  40. }
  41.  
  42. ?>
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.