Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Usuwanie lub zmiana linii w pliku tekstowym [php]
Forum PHP.pl > Forum > PHP
mxm
Witam!!

Zna ktoś dobry i w miarę prosty na osbługe pliku tekstowego aby zmienic w nim lub usunac zadaną linie??

Powiedzmy ze plik to np.: baza.txt i ma zawartość:
Kod
Tekst pierwszy
Tekst drugi
Tekst trzeci
Tekst czwarty

Teraz:
1. Jak najprościej usunąc linię ze zdaniem "Teskt drugi" tak aby pozostaly tylko 3 linie questionmark.gif
2. Jak usunąć i zastąpić tą samą linie wyrażeniem np "X files" questionmark.gif

Sam szukałem tego na tym forum przez wyszukiwarke ale nic nie znalazła, a z wyszukiwarki google.pl i stron tam znalezionych nie pisze za wiele na ten temat, zeby nie powiedziec, ze prawie nic tongue.gif Sam mam na to sposoby ale są one dosyć skomplikowane wiec szukam jakies funcji z php, ktora uproscilaby to zadanie nie kasujac i zapisujac całego pliku na nowo!!!
mxm
No tak. Przeszukałem w php.net ale zupełnie nie wiem jak to zastosowac. Wiem ze file odczytuje plik, foreach przepisuje tablice do innej zmiennej a unset nie wiem do czego ma konkretnie służyć. Możesz napisać jakiś konkretny przykład bo nie za bardzo łapie twój tok rozumowania. Wez pod uwage ze nie jestem biegłym programistą php winksmiley.jpg

A moze inne pytanie. Jak usunąc z tablicy cala linie lub zastapic w niej konkretna wartosc??
Arrow
witam, w zasadzie wszytsko masz podane jak na tacy ...

  1. <?php
  2.  
  3.  $tablicaPlik = file('plik.txt');
  4.  
  5. foreach($tablicaPlik as $tab)
  6. {
  7. unset($tablicaPlik[$indeksDoUsuniecia]);
  8. }
  9.  
  10. ?>
mxm
super dzieki biggrin.gif
A co oznacza zmienna $indeksDoUsuniecia questionmark.gif numer wiersza czy podany ciag do usuniecia??
Arrow
Cytat(mxm @ 2006-03-18 20:30:02)
super dzieki biggrin.gif
A co oznacza zmienna $indeksDoUsuniecia questionmark.gif numer wiersza czy podany ciag do usuniecia??

numer wiersza smile.gif
Spirit86
  1. <?php
  2.  
  3. //usuwanie niechcianego wiersza
  4. $UsunWiersz = 15;
  5. $tablicaPlik = file('plik.txt');
  6. unset($tablicaPlik[$UsunWiersz]);
  7.  
  8. //zapis do pliku nowego contentu
  9. $content = implode("\n", $tablicaPlik);
  10. zapiszdoPliku($content);
  11.  
  12. ?>


może tak smile.gif Tamto wyżej z foreach nie działa na pewno tak jak powinno...
mxm
No działa biggrin.gif
  1. <?php
  2. //usuwanie niechcianego wiersza
  3. $UsunWiersz = 2;
  4. $PlikBazy = "baza.cfg";
  5. $tablicaPlik = file($PlikBazy);
  6. unset($tablicaPlik[$UsunWiersz]);
  7.  
  8. //zapis do pliku nowego contentu
  9. $content = implode("", $tablicaPlik);
  10.  
  11. $plik = fopen($PlikBazy,"w+");
  12. fwrite($plik,$content);
  13. fclose($plik);
  14. ?>

A jaka byłaby komenda na zmiane zawartosci dla danej linii?? Bo jesli ją skasuje to potem ciezko cos wstawic w to samo miejsce tongue.gif

EDIT:
Znalałem ciekawe funkcje:
array_slice - Wytnij kawałek tablicy
array_splice - Usuń część tablicy i zamień ją na coś innego
Z tego co widze funkcje nawet fajne ale chyba malo funkcjonalne...
neo1986kk
a co zrobić jeśli nie znam numeru linii chodzi mi o operacje tak jak na bazie mysql

mam cos takiego

1
5
4
7
2
3
6


no i teraz chce usunąć jeden z wierszy na przyklad ten gdzie treścią jest 7, ale nie wiem który to wiersz teraz łatwo poznać że czwarty...
d3ut3r
coś takiego powinno zadziałać:

  1. $usun="tekst do usuniecia";
  2. $plik="plik.txt";
  3. $zawartosc=file($plik);
  4. foreach ($zawartosc as $k=>$element){
  5. if ($element==$usun){
  6. unset($zawartosc[$k]);
  7. // można tutaj dać break; wtedy usunie tylko pierwszy znaleziony element
  8. }
  9. }
  10. //a dalej tak jak napisał mxm
  11. //zapis do pliku nowego contentu
  12. $tresc = implode("", $zawartosc);
  13.  
  14. $plik = fopen($plik,"w+");
  15. fwrite($plik,$tresc);
  16. fclose($plik);



neo1986kk
wszystko fajnie tylko nie działa tu if

$usun=1;
$element=1; - oczywiscie zapisany w pliku tekstowym
if($element==$usun)
{
echo 'dziala';
}

else echo 'nie dziala';

w takim przypadku wychodzi ze nie dziala
d3ut3r
spróbuj jeszcze tak:

  1. if (trim($element)==$usun){
  2. ....
  3. }
neo1986kk
ok działa tylko nie widzę przycisku pomógł:/ dzięki:)
Demoneos
Cytat(d3ut3r @ 25.10.2010, 14:55:17 ) *
coś takiego powinno zadziałać:

  1. $usun="tekst do usuniecia";
  2. $plik="plik.txt";
  3. $zawartosc=file($plik);
  4. foreach ($zawartosc as $k=>$element){
  5. if ($element==$usun){
  6. unset($zawartosc[$k]);
  7. // można tutaj dać break; wtedy usunie tylko pierwszy znaleziony element
  8. }
  9. }
  10. //a dalej tak jak napisał mxm
  11. //zapis do pliku nowego contentu
  12. $tresc = implode("", $zawartosc);
  13.  
  14. $plik = fopen($plik,"w+");
  15. fwrite($plik,$tresc);
  16. fclose($plik);


Świetne rozwiązanie. Użyłem tego skryptu, żeby usunął ostatnią linię w pliku i zadziałało, tylko, że ta linia pozostała pusta. Jak można by było przerobić ten skrypt, żeby całkowicie usunął linię (a nie zostawił ją pustą)?
Kshyhoo
Przeanalizuj ten kod:
  1. $plik = "plik.txt";
  2.  
  3. // odczyt
  4. $bufor = array();
  5. $fd = fopen($plik, "r");
  6. while (!feof ($fd))
  7. {
  8. $linia = fgets($fd, 1024);
  9. if(strlen(trim($linia)))
  10. {
  11. $bufor[] = $linia;
  12. }
  13. }
  14. fclose($fd);
  15.  
  16. // zapis
  17. $fdw = fopen($plik, "w");
  18. foreach($bufor as $wiersz)
  19. {
  20. fwrite($fdw, $wiersz);
  21. }
  22. fclose($fdw);
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.