Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php]Odczyt wybranych linii z pliku txt
Zawleka
post
Post #1





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 1.08.2006

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


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

Ten post edytował Zawleka 8.10.2007, 13:30:27
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #2





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Najpierw pokaż, jak próbwałeś to zrobić.

Pozdrawiam.

aha
Popraw proszę tytuł topiku na zgodny z zasadami forum Przedszkole


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
Zawleka
post
Post #3





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 1.08.2006

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


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 ?
Go to the top of the page
+Quote Post
Inzabi
post
Post #4





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 2.10.2007
Skąd: Wrocław

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


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.
Go to the top of the page
+Quote Post
Nattfarinn
post
Post #5





Grupa: Zarejestrowani
Postów: 136
Pomógł: 22
Dołączył: 19.09.2007
Skąd: Sosnowiec

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


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

Ten post edytował Nattfarinn 8.10.2007, 14:14:01


--------------------
Code should run as fast as necessary, but no faster; something important is always traded away to increase speed.
-- R. Pattis
Go to the top of the page
+Quote Post
Zawleka
post
Post #6





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 1.08.2006

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


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


Ten post edytował Zawleka 8.10.2007, 15:08:56
Go to the top of the page
+Quote Post
iPrezes
post
Post #7





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 13.02.2011

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


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
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 Aktualny czas: 21.08.2025 - 06:20