Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Usuwanie lub zmiana linii w pliku tekstowym [php], Jak to zrobić najprościej...
mxm
post
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 (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
2. Jak usunąć i zastąpić tą samą linie wyrażeniem np "X files" (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/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
 
Start new topic
Odpowiedzi (1 - 14)
Spirit86
post
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
Go to the top of the page
+Quote Post
mxm
post
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 (IMG:http://forum.php.pl/style_emoticons/default/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
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. ?>
Go to the top of the page
+Quote Post
mxm
post
Post #5





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

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


super dzieki (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
A co oznacza zmienna $indeksDoUsuniecia (IMG:http://forum.php.pl/style_emoticons/default/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
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 (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
A co oznacza zmienna $indeksDoUsuniecia (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) numer wiersza czy podany ciag do usuniecia??

numer wiersza (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Spirit86
post
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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Tamto wyżej z foreach nie działa na pewno tak jak powinno...
Go to the top of the page
+Quote Post
mxm
post
Post #8





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

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


No działa (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/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
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
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);



Go to the top of the page
+Quote Post
neo1986kk
post
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
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. }
Go to the top of the page
+Quote Post
neo1986kk
post
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
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
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
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 3.10.2025 - 15:49