Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Usuwanie lub zmiana linii w pliku tekstowym [php], Jak to zrobić najprościej...
mxm
post 18.03.2006, 17:11:56
Post #1





Grupa: Zarejestrowani
Postów: 46
Pomógł: 1
Dołączył: 9.06.2005

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


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!!!

Ten post edytował mxm 18.03.2006, 17:13:05
Go to the top of the page
+Quote Post
Spirit86
post 18.03.2006, 17:18:52
Post #2





Grupa: Zarejestrowani
Postów: 607
Pomógł: 23
Dołączył: 8.09.2004
Skąd: Wrocław

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


robisz tak:
file" title="Zobacz w manualu php" target="_manual
foreach" title="Zobacz w manualu php" target="_manual
unset" title="Zobacz w manualu php" target="_manual


--------------------
Audio: Metallica, Soil, RHCP, OffSpring, Green Day, "Retro", Gorillaz, Disturbed, Coma
DB: MySQL 4.1 | php: 4.4.3 Pomogłem Ci? Wciśnij przycisk POMÓGŁ.
Go to the top of the page
+Quote Post
mxm
post 18.03.2006, 17:40:05
Post #3





Grupa: Zarejestrowani
Postów: 46
Pomógł: 1
Dołączył: 9.06.2005

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


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??

Ten post edytował mxm 18.03.2006, 17:43:21
Go to the top of the page
+Quote Post
Arrow
post 18.03.2006, 18:12:06
Post #4





Grupa: Zarejestrowani
Postów: 43
Pomógł: 0
Dołączył: 5.05.2003

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


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. ?>


--------------------
Pozdrawiam Bartosz
Go to the top of the page
+Quote Post
mxm
post 18.03.2006, 18:30:02
Post #5





Grupa: Zarejestrowani
Postów: 46
Pomógł: 1
Dołączył: 9.06.2005

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


super dzieki biggrin.gif
A co oznacza zmienna $indeksDoUsuniecia questionmark.gif numer wiersza czy podany ciag do usuniecia??

Ten post edytował mxm 18.03.2006, 18:41:40
Go to the top of the page
+Quote Post
Arrow
post 18.03.2006, 18:45:15
Post #6





Grupa: Zarejestrowani
Postów: 43
Pomógł: 0
Dołączył: 5.05.2003

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


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


--------------------
Pozdrawiam Bartosz
Go to the top of the page
+Quote Post
Spirit86
post 18.03.2006, 19:35:50
Post #7





Grupa: Zarejestrowani
Postów: 607
Pomógł: 23
Dołączył: 8.09.2004
Skąd: Wrocław

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


  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...


--------------------
Audio: Metallica, Soil, RHCP, OffSpring, Green Day, "Retro", Gorillaz, Disturbed, Coma
DB: MySQL 4.1 | php: 4.4.3 Pomogłem Ci? Wciśnij przycisk POMÓGŁ.
Go to the top of the page
+Quote Post
mxm
post 18.03.2006, 22:25:21
Post #8





Grupa: Zarejestrowani
Postów: 46
Pomógł: 1
Dołączył: 9.06.2005

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


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...

Ten post edytował mxm 19.03.2006, 00:04:51
Go to the top of the page
+Quote Post
neo1986kk
post 25.10.2010, 11:33:32
Post #9





Grupa: Zarejestrowani
Postów: 561
Pomógł: 3
Dołączył: 2.02.2009

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


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...
Go to the top of the page
+Quote Post
d3ut3r
post 25.10.2010, 14:55:17
Post #10





Grupa: Zarejestrowani
Postów: 709
Pomógł: 176
Dołączył: 24.10.2010

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


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);





--------------------
http://d3ut3r.wordpress.com/ | mysql_* jest przestarzałe UŻYWAJ PDO!
Go to the top of the page
+Quote Post
neo1986kk
post 25.10.2010, 21:48:34
Post #11





Grupa: Zarejestrowani
Postów: 561
Pomógł: 3
Dołączył: 2.02.2009

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


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
Go to the top of the page
+Quote Post
d3ut3r
post 25.10.2010, 21:58:48
Post #12





Grupa: Zarejestrowani
Postów: 709
Pomógł: 176
Dołączył: 24.10.2010

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


spróbuj jeszcze tak:

  1. if (trim($element)==$usun){
  2. ....
  3. }


--------------------
http://d3ut3r.wordpress.com/ | mysql_* jest przestarzałe UŻYWAJ PDO!
Go to the top of the page
+Quote Post
neo1986kk
post 25.10.2010, 22:04:30
Post #13





Grupa: Zarejestrowani
Postów: 561
Pomógł: 3
Dołączył: 2.02.2009

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


ok działa tylko nie widzę przycisku pomógł:/ dzięki:)
Go to the top of the page
+Quote Post
Demoneos
post 6.05.2011, 21:36:55
Post #14





Grupa: Zarejestrowani
Postów: 149
Pomógł: 0
Dołączył: 26.02.2008

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


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ą)?


--------------------
Go to the top of the page
+Quote Post
Kshyhoo
post 6.05.2011, 21:45:34
Post #15





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




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);


--------------------
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 Wersja Lo-Fi Aktualny czas: 7.05.2025 - 06:10