Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Usuwanie wielu rekordów z pliku
szczawik
post
Post #1





Grupa: Zarejestrowani
Postów: 52
Pomógł: 0
Dołączył: 19.08.2010

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


Witam
Jak zrobić, abym mógł usuwać z pliku txt kilka wybranych rekordów?
Oto kod

  1. <?php
  2. $plik = "admin/baza.txt";
  3.  
  4. if ((isset($_POST['usun'])) AND (is_numeric($_POST['usun']))) {
  5. /* sprawdzam czy zmienna $_POST['usun'] zostala zainicjonowana i czy jest cyfrą */
  6.  
  7. $dane = file($plik); /* pobieram dane z pliku */
  8. unset($dane[$_POST['usun']]); /* usuwam wybrany rekord tablicy */
  9.  
  10. $f = fopen($plik, "w"); /* nawiązuje połączenie z plikiem i kasuje jego zawartosc */
  11. foreach($dane as $linia){
  12. fputs($f, $linia); /* wprowadzam linie po linii do pliku */
  13. }
  14. fclose($f); /* zamykam polączneie z plikiem */
  15.  
  16. }
  17.  
  18. ?>
  19.  
  20. <form action="usun.php" method="post">
  21. <?php
  22. $dane = file($plik);
  23.  
  24. for($i=0;$i<count($dane);$i++) {
  25. list($imie[$i], $nazwisko[$i], $miejscowosc[$i]) = explode(" || ", $dane[$i]);
  26. }
  27.  
  28. for($i=0;$i<count($imie);$i++)
  29. echo '<input name="usun" type="checkbox" value="'.$i.'">'.$imie[$i]." ".$nazwisko[$i].", ".$miejscowosc[$i]."</input><br>";
  30.  
  31. ?>
  32.  
  33. <input type="submit" value="usun" />
  34. </form>
Go to the top of the page
+Quote Post
Pilsener
post
Post #2





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


1. Odczytać linię n z pliku A
2. Sprawdzić, czy spełnia warunki kasacji
3. Jeśli nie, to zapisać linię n do pliku B
4. Powyższe powtórzyć tyle razy, ile jest linii w pliku A
5. Skasować plik A a nazwę pliku B zmienić na A

Potrzebny kod znajdziesz tutaj:
http://www.forumweb.pl/viewtopic.php?t=39103

Kiedyś napisałem jak mysql był luksusem ale wciąż jak widać się przydaje smile.gif
Go to the top of the page
+Quote Post
szczawik
post
Post #3





Grupa: Zarejestrowani
Postów: 52
Pomógł: 0
Dołączył: 19.08.2010

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


dzięki wielkie winksmiley.jpg

a czy można w jakiś sposób, aby skrypt wybrał z pliku txt losową linie?
Go to the top of the page
+Quote Post
CuteOne
post
Post #4





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


  1.  
  2.  
  3. $losowa_linia = rand(0,count($dane)-1);
  4.  


Ten post edytował CuteOne 31.08.2010, 17:22:21
Go to the top of the page
+Quote Post
Pilsener
post
Post #5





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


No tak, tylko nie zawsze dysponujemy pamięcią, do której możemy wrzucić cały plik a nawet jeśli to lepiej tego nie robić, bo się zamuli. Z kolei policzenie linii w pliku jest proste (kod dałem powyżej w linku), ale musimy dwa razy parsować plik (raz by policzyć linie a drugi raz by wybrać właściwą linię)

Możemy zrobić np. tak: jeśli przechowujemy nr wpisu w rekordach pliku, pobieramy sobie ostatni rekord (w tutorialu też jest kod jak to zrobić a także na forum: http://forum.php.pl/index.php?showtopic=139139), wyciągamy ID wpisu i losujemy liczbę od 1 do ID tego wpisu (funkcją rand) i wczytujemy do pliku rekord o tym ID. Jeśli ID tego wpisu nie ma (bo został np. twardo skasowany) to bierzemy po prostu następny rekord.

Ale to rozwiązanie wydaje się najprostsze: mierzymy rozmiar pliku i losujemy miejsce w pliku, do którego przeniesiemy się funkcją fseek i odczytamy rekord pod tym miejscem - po prostu parsujemy plik nie od początku, ale od losowego miejsca i nie do końca, lecz do momentu wczytania całego rekordu - po czym używamy break by wyskoczyć z pętli i wyświetlić wylosowaną linię.
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: 22.08.2025 - 05:02