Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] podmienianie konkretnej linii w pliku tekstowym
Forum PHP.pl > Forum > PHP
llukasz
Witam!
Mam taki oto kod:
  1. <?php
  2. $nazwa = "../newsy.txt"; 
  3. $myFile = fopen($nazwa, "r");
  4. $i=0;
  5. while(!feof($myFile)) {
  6.  $myLine = fgets($myFile, 2000);
  7.  $i++; 
  8.  }
  9. fclose($myFile);
  10.  
  11.  
  12. $nazwa = "../newsy.txt";
  13. $myFile = fopen($nazwa, "r");
  14. $k=1;
  15. $end=$edytuj;
  16. while(!feof($myFile))
  17.  {
  18.  $myLine = fgets($myFile, 99999);
  19. if ($k>=$edytuj) {
  20. if ($k<=$end) {
  21. $zmien=$myLine;
  22. };
  23.  };
  24.  $k++;
  25.  }
  26.  
  27.  
  28. $nowe = "<span class="datan">".$dataqw."</span><span class="tytuln">".$tytulqw."</span><span class="trescn">".$trescqw."n";
  29. $nazwa="../newsy.txt";
  30. $myFile = fopen($nazwa, "r+");
  31. $wszystko = fread($myFile, filesize($nazwa));
  32. $zapisz = eregi_replace($zmien, $nowe, $wszystko);
  33. rewind($myFile);
  34. fputs($myFile, $zapisz);
  35. fclose($myFile);
  36.  
  37. #_______________________________________________________________________________
    __
  38.  
  39. $zmienne=$dataqw."n".$tytulqw."n".$trescqw."n";
  40. $wszystkooo = file('../newsy_z.txt');
  41. $dataaa = $wszystkooo[$edytuj*3-3];
  42. $tytulll = $wszystkooo[$edytuj*3-2];
  43. $tresccc = $wszystkooo[$edytuj*3-1];
  44. $razemstare=$dataaa."n".$tytulll."n".$tresccc."n";
  45. $nazwazz = "../newsy_z.txt";
  46. $myFilezz = fopen($nazwazz, "r+");
  47. $wszystkozz=fread($myFilezz, filesize($nazwazz));
  48. $zmiennezz = eregi_replace($razemstare, $zmienne, $wszystkozz);
  49. rewind($myFilezz);
  50. fputs($myFilezz, $zmiennezz);
  51. fclose($myFilezz);
  52. echo $razemstare."<br />".$zmienne."<br />".$wszystkozz."<br />".$zmiennezz."<br />";
  53. ?>




mam z nim kilka problemów- może tak na szybko (wiem, że jest to pewnie mało praktyczny kod, bo nie znam php i składam co mi się uda) co ten kod robi, mianowicie część do linii sprawia, że zawartość danej linii w pliku tekstowym jest zmieniona i zapisana (wcześniej odczytana), w drugiej części to samo, co prawda trochę inaczej są te treści sformatowane ale to nieważne, sprawa wygląda tak, że w pierwszej części, nie wiem czemu, przy zapisie (zmienne z treścią przesyłane są przez formularz na innej stronie), w przypadku gdy nowe dane są "krótsze" od poprzednich te starsze, a w każdym razie część pozostaje (można by to określić takim wzorem dla zrozumienia, że zostaje x znaków = stara część - nowa część (oczywiście gdy nowa jest krótsza)) - problem z częścią po linii jest taki, że wszystko wykonuje się dobrze, aż do chwili zapisu, tzn kod się nie zapisuje, jakby nigdy nic, ale pisząc post wpadłem na pomysł czym może to być spowodowane, więc proszę o pomoc przy pierwszym problemie.
John
Prosty sposób :
  • odczytać plik do arraya ( metodą file(nazwa pliku) )
  • wyszukiwać konkretne linijki do zmiany ( metodą array_search(czegoszukamy, array) )
  • zapisywać arraya do pliku.

W momencie kiedy edytujesz arraya a potem go zapiszesz z powrotem nie powinno być takich problemów jak pozostałości starych słów.

Poza tym zastanawiam się na fput czy nie lepsze byłoby fwrite.
llukasz
Dobrze, w takim razie spróbuję, a w razie jakby coś nie wyszło napiszę, dzięki za odpowiedź.

EDIT: a więc w jaki sposób powinienem te linijki zmieniać, te które wyszukam, z tego co wypatrzyłem, to zmienna staje się numerem w tej tablicy... ale nie mam pomysłu jak zmienić to w inny sposób, najlepiej proszę o przykład, nawet jakiś skrócony...

EDIT2: kolejne pytanie - jak w najprostszy i najskuteczniejszy sposób usunąć daną linię z pliku tekstowego?
akubiczek
Cytat(John @ 2.08.2007, 21:07:07 ) *
Poza tym zastanawiam się na fput czy nie lepsze byłoby fwrite.

Przecież to jest to samo!
John
@akubiczek :Skoro tak mówisz to Ci wierzę ;-). [ ale gafa ;-p ]

funkcja array_search zwraca numer klucza pod, którym znaleziono szukaną wartość. Przykład hym...

proszę : http://pl2.php.net/manual/pl/function.array-search.php
llukasz
@akubiczek:

jeśli potrafisz pomóc, to proszę o poświęcenie chwili czasu i dzięki za info, bo właśnie się zastanawiałem, czy to nie jest powodem problemu (tak na logikę, po angielsku put to położyć, write zapisać - przynajmniej tak mi się wydaje tongue.gif... więc pomyślałem, że może coś może w tym być).

EDIT: John, miałem na myśli przykład 'całościowy' tzn. wyszukanie nie jest kłopotem, miałem na myśli edycję, tzn. nie bardzo mam pomysł jak teraz to wyedytować...
John
Cytat(llukasz @ 2.08.2007, 22:31:33 ) *
@akubiczek:

jeśli potrafisz pomóc, to proszę o poświęcenie chwili czasu i dzięki za info, bo właśnie się zastanawiałem, czy to nie jest powodem problemu (tak na logikę, po angielsku put to położyć, write zapisać - przynajmniej tak mi się wydaje tongue.gif... więc pomyślałem, że może coś może w tym być).

EDIT: John, miałem na myśli przykład 'całościowy' tzn. wyszukanie nie jest kłopotem, miałem na myśli edycję, tzn. nie bardzo mam pomysł jak teraz to wyedytować...


skoro znasz klucz pod którym znajduje sie linijka z textem to poprostu podmieniasz ja w tablic.
  1. <?php
  2. // szukanie
  3. $key = array_search('moj_tekst',$array);
  4. //edycja
  5. $nowy_tekst = 'costam sobie bylo';
  6. $array[$key] = $nowy_tekst;
  7. ?>
harek
  1. <?php
  2. $nowe = "<span class="datan">".$dataqw."</span><span class="tytuln">".$tytulqw."</span><span class="trescn">".$trescqw."n";
  3. $nazwa = "newsy.txt";
  4. $plik = file($nazwa);
  5. $plik[$edytuj] = $nowe;
  6. $myFile = fopen($nazwa, "w");
  7. foreach($plik as $value)
  8. {
  9. fputs($myFile, $value);
  10. }
  11. fclose($myFile)
  12. ?>



Powinno działać , wystarczy ze przekażesz linijkę z pliku news.txt którą ma zamienić w zmiennej $edytuj.
llukasz
Witam!
Dzięki za wszystko, udało się smile.gif, śmiga dokładnie tak jak chciałem, a przepraszam, że jeszcze zajmę chwilę - prosiłbym kogoś o napisanie lub chociaż jakąś podpowiedź jak najszybciej usunąć daną linię z pliku, zakładając tak jak w przykładzie @hareka, że numer linii znam (aczkolwiek przykład @Johna też się bardzo przydał - i to do kilku rzeczy smile.gif)
harek
usuwasz w podobny sposób co wyzej winksmiley.jpg

  1. <?php
  2. $nazwa = "newsy.txt";
  3. $plik = file($nazwa);
  4. $max=count($plik);
  5. for($i=$usun-1;$i<$max-1;$i++)
  6. {
  7. $plik[$i]=$plik[$i+1];
  8. }
  9. array_splice($plik, $max-1);
  10. $myFile = fopen($nazwa, "w");
  11. foreach($plik as $value)
  12. {
  13. fputs($myFile, $value);
  14. }
  15. fclose($myFile)
  16. ?>


przekazujesz do skryptu poprzez zmienną $usun numer rekordu do usunięcia ...
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.