Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Odnajdywanie frazy w string'u zapisanym w pliku i zamiana na inną frazę
Forum PHP.pl > Forum > Przedszkole
AmyLokmart
Mam kolejny problem Chłopaki sad.gif Dużo wykonuje działań na plikach i chcę wiedzieć wiele rzeczy, ale czasami stoję w martwym punkcie. Teraz chciałabym znaleźć w tekście, który jest zapisany w pliku konkretną frazę. Dajmy na to, że fraza ta to "YEAH". Potem tą frazę chciałabym zamienić i zapisać plik bez zmian, to znaczy, żeby mi zamieniło znaleziony tekst, zamieniło go na taki jaki chce i zapisało plik bez utraty reszty tekstu, który w tym pliku jest zapisany smile.gif Fiu mam nadzieję, że mnie zrozumiano, bo trochę się napisałam smile.gif

Lubię porządek i mam już spory początek kodu PHP w technologii EC:

  1. $amy_text = "YEAH";
  2. $amy_text_change = "Yeah";
  3. $amy_file = file("date.txt");
  4. // Pokaż prawdziwość kiedy tekst var("amy_text") jest znaleziony
  5. $amy_found = false;
  6. foreach($amy_file as $amy_line) {
  7. if (strpos($amy_line, $amy_text) !== false)
  8. {
  9. $amy_found = true;
  10. // Otwórz plik do odczytu i modyfikuj
  11. $amy_mod_file = "date.txt";
  12. $amy_check_file = fopen($amy_mod_file, 'a');
  13. $amy_data = fread($amy_check_file, filesize($amy_mod_file));
  14. $amy_mod_end = $amy_data->$amy_text_change;
  15. fclose($amy_check_file);
  16. // Otwórz plik do zapisu
  17. $amy_check_file = fopen($amy_mod_file, 'a');
  18. fwrite($amy_check_file, $amy_mod_end);
  19. fclose($amy_check_file);
  20. $amy_status = "Tekst został zmieniony.";
  21. print $amy_status;
  22. }
  23. }
  24. // Jeśli tekst nie został znaleziony wypisz komunikat
  25. if (!$amy_found)
  26. {
  27. $amy_status = "nie znaleziono i nie zamieniono tekstu.";
  28. print $amy_status;
  29. }


Jak ktoś wie to Bardzo bym Prosiła, o podpowiedź co robię źle, że nie działa tak jak chcę sad.gif Z Góry Serdecznie Dziękuję Dobrym Ludziom smile.gif
viking
Ale po co jeszcze raz otwierasz plik? File tworzy tablicę. Jeśli w niej znajdziesz to podmień słowo w danej linii i na koniec masz tablicę do zapisu ponownego.
AmyLokmart
Przerobiłam trochę swój skrypt na taki:

  1. $amy_text = "YEAH";
  2. $amy_text_change = "Yeah";
  3. $amy_file = file("date.txt");
  4. // Pokaż prawdziwość kiedy tekst var("amy_text") jest znaleziony
  5. $amy_found = false;
  6. foreach($amy_file as $amy_line) {
  7. if (strpos($amy_line, $amy_text) !== false)
  8. {
  9. $amy_status = "Tekst został zmieniony.";
  10. $amy_found = true;
  11. $amy_mod_end = $amy_line->$amy_text_change;
  12. fwrite($amy_check_file, $amy_mod_end);
  13. fclose($amy_check_file);
  14. print $amy_status;
  15. }
  16. }
  17. // Jeśli tekst nie został znaleziony wypisz komunikat
  18. if (!$amy_found)
  19. {
  20. $amy_status = "nie znaleziono i nie zamieniono tekstu.";
  21. print $amy_status;
  22. }


Wykonałam i PHP zwróciło komunikat: "Tekst został zmieniony.", ale kiedy otworzyłam plik, by sprawdzić czy rzeczywiście się tak stało, niestety rozczarowałam się, ponieważ YEAH nie zmieniło się tak jak chciałam.

Co robię źle? Proszę o poprawkę sad.gif
aras785
  1. <?php
  2.  
  3. $file = 'dane.txt'; //sciezka do pliku
  4. $content = file_get_contents($file); //pobieranie zawartości pliku
  5. $content = \str_replace('YEAH', 'WOOOOOOW', $content); //zmieniamy YEAH na WOOOOOOW
  6. file_put_contents($file, $content);//zapisywanie nowe zawrtości do tego samego pliku

viking
  1. $amy_text = "/YEAH/ui";
  2. $amy_text_change = "Yeah";
  3. $amy_file = file("plik.txt", FILE_IGNORE_NEW_LINES);
  4. foreach($amy_file as &$amy_line) {
  5. $amy_line = preg_replace($amy_text, $amy_text_change, $amy_line);
  6. }
  7. unset($amy_line);
  8. file_put_contents('plik.txt', implode(PHP_EOL, $amy_file));

Albo z tablicą. Tylko naprawdę, przestań używać wszędzie w nazwie zmiennej "amy".
AmyLokmart
Dziękuję "aras785" za Twój przykład smile.gif Działa dobrze smile.gif

Dodałam do Twojego przykładu dyrektywe[count>0], aby mi wyświetlało komunikat, że zmieniono. smile.gif
aras785
Cytat(viking @ 5.12.2021, 18:00:37 ) *
Albo z tablicą. Tylko naprawdę, przestań używać wszędzie w nazwie zmiennej "amy".


hahah czasem w starych skryptach spotykam takie kwiatki biggrin.gif
AmyLokmart
"Viking" Dziękuję za Twój kodzik z "tablicą", ale przykład "arasa785" jest, jakby to napisać, prosty smile.gif Ja raczej nie używam tablicy na działaniach dotyczących plików, ponieważ w różnych plikach wykonuje różne skrypty, a tablica tylko mi wszystko pomiesza. Tablicę wykorzystuje wtedy jak chcę wprowadzić "obudowanie strukturalne", czyli dodatkowy kod do bardzo dużej ilości plików. Ale "Viking" Dziękuję Tobie za uwagi i za to, że podzieliłeś się swoim kodem smile.gif
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.