![]() |
![]() ![]() |
![]() |
![]()
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
|
|
|
![]()
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 ![]() |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 52 Pomógł: 0 Dołączył: 19.08.2010 Ostrzeżenie: (0%) ![]() ![]() |
dzięki wielkie
![]() a czy można w jakiś sposób, aby skrypt wybrał z pliku txt losową linie? |
|
|
![]()
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%) ![]() ![]() |
|
|
|
![]()
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ę. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 05:02 |