Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]Odczyt wybranych linii z pliku txt
Forum PHP.pl > Forum > Przedszkole
Zawleka
Witam.

Mam taki problem, nie wiem jak na pisać następujący króciutki skrypt.


Plik txt będzie wyglądał mniej więcej tak


zdjecie.jpg Opis zdjecia 1

zdjecie2.jpg Opis zdjęcia 2

itd.

Udaje mi się tylko zapis.

Z odczytem takim jakbym chciał mam problem.

  1. <form action="test.php" method="post" enctype="multipart/form-data" >
  2.  
  3. <input name="plik" type="text" />
  4.  
  5. <input name="opis" type="text" />
  6.  
  7. <input name="Wyslij" type="submit" value="Wyślij" style="border: 1px dotted silver; background-color: #ececec;" />
  8.  
  9. <br />
  10. </form>
  11.  
  12. <?php
  13. $plik_name = $_POST['plik'];
  14. $opis = $_POST['opis'];
  15.  
  16. if(!empty($plik_name) && !empty($opis) )
  17. { 
  18.  
  19. $nazwa_pliku = "dane.txt";
  20.  
  21.  
  22.  
  23. if (is_writeable($nazwa_pliku))
  24. {
  25.  if ($plik = fopen($nazwa_pliku, "a"))
  26.  {
  27. if (fwrite($plik, "$plik_name $opis\n") !== FALSE) echo "Zapis do pliku zakończył się powodzeniem...";
  28. else echo "Zapis do pliku się nie powiódł...";
  29.  
  30. fclose($plik);
  31.  
  32.  } else echo "Nie mogę nawiązać połączenia z plikiem...";
  33.  
  34. } else echo "Do pliku nie można dopisać informacji lub on nie istnieje...";
  35.  
  36. }
  37.  
  38. ?>


Chodzi mi o to aby skrypt odczytywał tylko wybraną linie i to nie w całości. Np po podaniu nazwy pliku zdjecie52.jpg odczyta tylko tą część linii która jest za nazwą pliku.

Dodatkowo przy zapisywaniu, jak napisać aby przy próbie zapisu opisu odpowiadającemu plikowi, który już jest na liście aby podmieniło opis. Czyli np:

na liście jest już " zdjecie20.jpg Opis zdjęcia 20 " użytkownik chce dodać " zdjecie20.jpg Super nowy opis zdjecia 20 " , chce aby podmienło to ze starym opisem.

Ktoś mi pomoże w tym banalnym pewnie zagadnieniu ? Będę wdzięczny smile.gif
Cysiaczek
Najpierw pokaż, jak próbwałeś to zrobić.

Pozdrawiam.

aha
Popraw proszę tytuł topiku na zgodny z zasadami forum Przedszkole
Zawleka
Doszedłem już do tego, że mogę odczytać wybraną linie

  1. <?php
  2. function getLine($file, $txt)
  3. {
  4. $arr = &file($file);
  5. $count = count($arr);
  6. $return = '';
  7.  
  8. for ($i=0; $i<$count; $i++)
  9. {
  10. if (eregi($txt, $arr[$i]))
  11. {
  12. $return = $arr[$i];
  13. break;
  14. }
  15. }
  16.  
  17. unset($arr);
  18. return $return;
  19. }
  20.  
  21. $plik = fopen($nazwa_pliku, "r");
  22.  
  23. echo getLine('dane.txt', 'moje');
  24. ?>


Tylko jak jeszcze wyciąć nazwa_zdjecia.jpg z poczatku tego odczytu ?
Inzabi
Nie da się zapisywać i odczytywać wybranej części pliku musisz wczytać cały plik do pamięci (na przykład do tablicy) i modyfikować tablicę, potem całą tablice zapisać do pliku.

Możesz użyć funkcji fseek, ale w Twoim przypadku to nie zadziała, bo struktura pliku(ilość znaków w każdej linii) musi być z góry znana.
Nattfarinn
Najprostszym-najprostszym (najprostsze nie znaczy odpowiednie: poprostu próbuję Cię nakierować na rozwiązanie) sposobem jest explode() wg. ".jpg" (lub jakiegoś znaku specjalnego oddzielającego nazwę zdjęcia od reszty).

Możesz też użyć wyrażeń regularnych...
Zawleka
Jakoś mi się udało samemu do tego dojść.

Proszę oto rozwiązanie

  1. <?php
  2. function getLine($file, $txt)
  3. {
  4. $arr = &file($file);
  5. $count = count($arr);
  6. $return = '';
  7.  
  8. for ($i=0; $i<$count; $i++)
  9. {
  10. if (eregi($txt, $arr[$i]))
  11. {
  12. $return = $arr[$i];
  13. break;
  14. }
  15. }
  16.  
  17. unset($arr);
  18. return $return;
  19. }
  20.  
  21.  
  22. $nazwa_pliku = "dane.txt";
  23.  
  24. $plik = fopen($nazwa_pliku, "r");
  25.  
  26. $linia = getLine($nazwa_pliku, ".jpg");
  27.  
  28. $wyraz = substr($linia,0, strpos($linia, "*"));
  29.  
  30. $ilosc = strlen($wyraz);
  31.  
  32. $title = substr($linia,$ilosc+1);
  33.  
  34. echo $title;
  35. ?>
iPrezes
a ja uzywajac twojego kodu mam taki blad :
Strict Standards: Only variables should be assigned by reference in G:\xampp\htdocs\Daniel\jebaj.php on line 4
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.