logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

PHP - jak usunąć konkretny wiersz z pliku tekstowego?

malum 27 Lip 2007 00:15 2857 2
REKLAMA
  • #1 4118429
    malum
    Poziom 23  
    Posty: 883
    Pomógł: 1
    Ocena: 141
    Witam!
    Zbudowałem stronę opierającą się o pliki tekstowe.
    Wszystkie dane zapisywane są w odpowiednich plikach.
    Mam jednak problem z usunięciem wybranego wiersza z takiego pliku.
    Załóżmy, że mój plik ma postać:

    ania||3||środa
    kasia||2||piątek
    sylwia||5||niedziela
    wiktor||0||czwartek
    ola||1||środa

    Jak z takiego pliku usunąć np. dane o wiktorze?

    Byłbym niezmiernie wdzięczny za szybką pomoc.
  • REKLAMA
  • #2 4118458
    krzychoocpp
    VIP Zasłużony dla elektroda
    Posty: 1866
    Pomógł: 387
    Ocena: 58
    Witam, z tego co wiem nie ma do tego automatu. Musisz przepisać cały plik pomijając linijkę wiktora. Jeśli to ma być wykorzystywane na dużych plikach, to pomyśl o bazie danych lub dodaniu do każdej linijki pola oznaczającego czy jest ona "usunięta", dopiero po jakimś czasie plik byłby kompaktowany.

    Pozdrawiam, Krzysztof.
  • #3 4118495
    malum
    Poziom 23  
    Posty: 883
    Pomógł: 1
    Ocena: 141
    krzychoocpp napisał:
    Witam, z tego co wiem nie ma do tego automatu. Musisz przepisać cały plik pomijając linijkę wiktora. Jeśli to ma być wykorzystywane na dużych plikach, to pomyśl o bazie danych lub dodaniu do każdej linijki pola oznaczającego czy jest ona "usunięta", dopiero po jakimś czasie plik byłby kompaktowany.

    Pozdrawiam, Krzysztof.


    Właśnie wpadłem na dość ciekawy pomysł. Jak zadziała to się pochwalę.
    Jeśli jednak macie coś ciekawego to chętnie skorzystam :-)

    Dodano po 1 [godziny] 20 [minuty]:

    No więc udało się :D

    Plik z danymi "plik.txt":
    
    
    poniedziałek|^|wtorek|^|środa|^|czwartek|^|piątek|^|sobota|^|niedziela|^|5
    poniedziałek|^|wtorek|^|środa|^|czwartek|^|piątek|^|sobota|^|niedziela|^|6
    poniedziałek|^|wtorek|^|środa|^|czwartek|^|piątek|^|sobota|^|niedziela|^|7
    poniedziałek|^|wtorek|^|środa|^|czwartek|^|piątek|^|sobota|^|niedziela|^|8
    poniedziałek|^|wtorek|^|środa|^|czwartek|^|piątek|^|sobota|^|niedziela|^|9
    poniedziałek|^|wtorek|^|środa|^|czwartek|^|piątek|^|sobota|^|niedziela|^|10
    poniedziałek|^|wtorek|^|środa|^|czwartek|^|piątek|^|sobota|^|niedziela|^|11
    poniedziałek|^|wtorek|^|środa|^|czwartek|^|piątek|^|sobota|^|niedziela|^|12
    poniedziałek|^|wtorek|^|środa|^|czwartek|^|piątek|^|sobota|^|niedziela|^|13
    poniedziałek|^|wtorek|^|środa|^|czwartek|^|piątek|^|sobota|^|niedziela|^|14
    poniedziałek|^|wtorek|^|środa|^|czwartek|^|piątek|^|sobota|^|niedziela|^|15
    poniedziałek|^|wtorek|^|środa|^|czwartek|^|piątek|^|sobota|^|niedziela|^|16
    poniedziałek|^|wtorek|^|środa|^|czwartek|^|piątek|^|sobota|^|niedziela|^|17
    poniedziałek|^|wtorek|^|środa|^|czwartek|^|piątek|^|sobota|^|niedziela|^|18
    poniedziałek|^|wtorek|^|środa|^|czwartek|^|piątek|^|sobota|^|niedziela|^|19
    poniedziałek|^|wtorek|^|środa|^|czwartek|^|piątek|^|sobota|^|niedziela|^|20
    poniedziałek|^|wtorek|^|środa|^|czwartek|^|piątek|^|sobota|^|niedziela|^|21
    poniedziałek|^|wtorek|^|środa|^|czwartek|^|piątek|^|sobota|^|niedziela|^|22
    poniedziałek|^|wtorek|^|środa|^|czwartek|^|piątek|^|sobota|^|niedziela|^|23
    poniedziałek|^|wtorek|^|środa|^|czwartek|^|piątek|^|sobota|^|niedziela|^|24
    poniedziałek|^|wtorek|^|środa|^|czwartek|^|piątek|^|sobota|^|niedziela|^|25
    poniedziałek|^|wtorek|^|środa|^|czwartek|^|piątek|^|sobota|^|niedziela|^|26
    poniedziałek|^|wtorek|^|środa|^|czwartek|^|piątek|^|sobota|^|niedziela|^|27
    poniedziałek|^|wtorek|^|środa|^|czwartek|^|piątek|^|sobota|^|niedziela|^|28
    
    


    Plik programu PHP "index.php":
    
    <?
       // ODCZYTANIE DANYCH Z PLIKU CZASOWEGO
    
    	$zmienna = 17;  // ustalenie warunku wpływającego na usunięcie rekordu
    
    	$dane=file("plik.txt");  // wczytywanie zawartości pliku do tablicy
    	$plik_dane = "";
    	$dlugosc = count($dane); // sprawdzanie ilości elementów tablicy
    
    	for($i=0;$i<$dlugosc;$i++)  
    	{
    	  $line_dane = explode("|^|", $dane[$i]);  // dzielenie elem. tablicy na dane oddzielone znacznikiem |^|
    	  $rekord = $line_dane[7]; // przypisywanie zmiennej wartości poddawanej sprawdzeniu
    	  if ($rekord <> $zmienna)   // sprawdzanie, czy $zmienna różni się od 7 wartości rekordu
    	  { 
    	    $plik_dane = $plik_dane.$dane[$i]; // dopisywanie do zmiennej kolejnych rekordów z wykluczeniem usuwanego
    	  }
       	}
    
    // ZAPISANIE NOWYCH DANYCH DO PLIKU "plik1.txt"
    
    	$link = "plik1.txt";
    	$file=fopen($link, "w");//otwieranie nowego pliku z zamazaniem danych 
    	flock($file, 2); //blokowanie do zapisu 
    	fwrite($file, $plik_dane); //zapis danych do pliku
    	flock($file, 3); //odblokowanie po zapisie 
    	fclose($file); 
    
    ?>
    


    A oto wynik - nowy plik "plik1.txt" utworzony przez program, w którym brakuje rekordu z wartością 17:
    
    
    poniedziałek|^|wtorek|^|środa|^|czwartek|^|piątek|^|sobota|^|niedziela|^|5
    poniedziałek|^|wtorek|^|środa|^|czwartek|^|piątek|^|sobota|^|niedziela|^|6
    poniedziałek|^|wtorek|^|środa|^|czwartek|^|piątek|^|sobota|^|niedziela|^|7
    poniedziałek|^|wtorek|^|środa|^|czwartek|^|piątek|^|sobota|^|niedziela|^|8
    poniedziałek|^|wtorek|^|środa|^|czwartek|^|piątek|^|sobota|^|niedziela|^|9
    poniedziałek|^|wtorek|^|środa|^|czwartek|^|piątek|^|sobota|^|niedziela|^|10
    poniedziałek|^|wtorek|^|środa|^|czwartek|^|piątek|^|sobota|^|niedziela|^|11
    poniedziałek|^|wtorek|^|środa|^|czwartek|^|piątek|^|sobota|^|niedziela|^|12
    poniedziałek|^|wtorek|^|środa|^|czwartek|^|piątek|^|sobota|^|niedziela|^|13
    poniedziałek|^|wtorek|^|środa|^|czwartek|^|piątek|^|sobota|^|niedziela|^|14
    poniedziałek|^|wtorek|^|środa|^|czwartek|^|piątek|^|sobota|^|niedziela|^|15
    poniedziałek|^|wtorek|^|środa|^|czwartek|^|piątek|^|sobota|^|niedziela|^|16
    poniedziałek|^|wtorek|^|środa|^|czwartek|^|piątek|^|sobota|^|niedziela|^|18
    poniedziałek|^|wtorek|^|środa|^|czwartek|^|piątek|^|sobota|^|niedziela|^|19
    poniedziałek|^|wtorek|^|środa|^|czwartek|^|piątek|^|sobota|^|niedziela|^|20
    poniedziałek|^|wtorek|^|środa|^|czwartek|^|piątek|^|sobota|^|niedziela|^|21
    poniedziałek|^|wtorek|^|środa|^|czwartek|^|piątek|^|sobota|^|niedziela|^|22
    poniedziałek|^|wtorek|^|środa|^|czwartek|^|piątek|^|sobota|^|niedziela|^|23
    poniedziałek|^|wtorek|^|środa|^|czwartek|^|piątek|^|sobota|^|niedziela|^|24
    poniedziałek|^|wtorek|^|środa|^|czwartek|^|piątek|^|sobota|^|niedziela|^|25
    poniedziałek|^|wtorek|^|środa|^|czwartek|^|piątek|^|sobota|^|niedziela|^|26
    poniedziałek|^|wtorek|^|środa|^|czwartek|^|piątek|^|sobota|^|niedziela|^|27
    poniedziałek|^|wtorek|^|środa|^|czwartek|^|piątek|^|sobota|^|niedziela|^|28
    
    


    Wszystko działa sprawnie i szybko :D
REKLAMA