Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] pętla zmieniająca tekst na inny w stringu dla każdego wiersza
thepanone
post 31.12.2013, 23:43:22
Post #1





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 14.01.2013

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


Chciałbym napisać program, który zrobi rzecz następującą:
1. pobierze zawartość pliku tekstowego i każdy kolejny wiersz zapisze w każdym kolejnym elemencie tablicy stringów
2. dla każdego kolejnego elementu tablicy sprawdzi czy w stringu występuje zadany fragment tekstu
2a. jeśli występuje to zamieni inny fragment tekstu w tym stringu na podany
2b. jeśli nie występuje to idzie dalej


Powiedzmy, że pkt 1 jest już wykonany i mam w tablicy zawartość pliku
załóżmy, że mam tablicę stringów pięcioelementową $tablica

wykorzystuję funkcje:
preg_match - do sprawdzenia czy w wierszu występuje fragment tekstu
preg_replace - do zamiany fragmentu tekstu na inny w tym stringu
  1. for ( i = 0, i < 5, i ++ )
  2. {
  3. if (preg_match("abc", $tablica[i])) //jeśli występuje w wierszu fragment "abc"
  4. {
  5. $tablica[i]= preg_replace(111, 555, $tablica[i]);//to zastąp w tym wierszu fragment 111 na 555
  6. }
  7. else
  8. {
  9. if (preg_match("def", $tablica[i])) //jeśli występuje w wierszu fragment "def"
  10. {
  11. $tablica[i]= preg_replace(111, 666, $tablica[i]);//to zastąp w tym wierszu fragment 111 na 666
  12. }
  13. else
  14. {
  15. if (preg_match("ghi", $tablica[i])) //jeśli występuje w wierszu fragment "ghi"
  16. {
  17. $tablica[i]= preg_replace(111, 777, $tablica[i]);//to zastąp w tym wierszu fragment 111 na 777
  18. }
  19. }
  20. }
  21. }
  22.  


proszę pomóc mi ten kod uczłowieczyć. W zasadzie wiem co mam użyć, ale jak to poskładać w kupę to już niestety nie.

Ten post edytował thepanone 31.12.2013, 23:49:30
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 12)
mar1aczi
post 31.12.2013, 23:54:52
Post #2





Grupa: Zarejestrowani
Postów: 731
Pomógł: 141
Dołączył: 9.05.2011
Skąd: śląskie

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


Bardziej:
  1. for ( i = 0, i < 5, i ++ )
  2. {
  3. if (preg_match("abc", $tablica[i])) //jeśli występuje w wierszu fragment "abc"
  4. {
  5. $tablica[i]= preg_replace(111, 555, $tablica[i]);//to zastąp w tym wierszu fragment 111 na 555
  6. }
  7. elseif (preg_match("def", $tablica[i])) //jeśli występuje w wierszu fragment "def"
  8. {
  9. $tablica[i]= preg_replace(111, 666, $tablica[i]);//to zastąp w tym wierszu fragment 111 na 666
  10. }
  11. elseif (preg_match("ghi", $tablica[i])) //jeśli występuje w wierszu fragment "ghi"
  12. {
  13. $tablica[i]= preg_replace(111, 777, $tablica[i]);//to zastąp w tym wierszu fragment 111 na 777
  14. }
  15. }


--------------------
Szanuj innych czas! Kliknij , gdy pomocną wskazówkę otrzymasz.
Go to the top of the page
+Quote Post
thepanone
post 1.01.2014, 20:35:54
Post #3





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 14.01.2013

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


Po odpaleniu skryptu z plikiem tekstowym nie dzieje się nic. Proszę o wskazówkę.
  1. <?php
  2. $tablicapliku = file("plik.txt");//wczytanie całego pliku w tablicę. Każdy wiersz jako osobny element tablicy. plik ma 15 wierszy
  3. $a = "/aaa/";
  4. $b = "/bbb/";
  5. $c = "/ccc/";
  6. $d = "/ddd/";
  7. $e = "/eee/";
  8. $zero = "/000/";
  9. $jeden = "/111/";
  10. $dwa = "/222/";
  11. $trzy = "/333/";
  12. $cztery = "/444/";
  13. $piec = "/555/";
  14.  
  15. for ( $i = 0; $i < 15; $i ++ )
  16. {
  17. if (preg_match($a, $tablicapliku[$i])) //jeśli występuje w wierszu fragment "abc"
  18. {
  19. $tablicapliku[$i]= preg_replace( $zero, $jeden , $tablicapliku[$i]);//to zastąp w tym wierszu fragment 000 na 111
  20. }
  21. elseif (preg_match($b, $tablicapliku[$i])) //jeśli występuje w wierszu fragment "/bbb/"
  22. {
  23. $tablicapliku[$i]= preg_replace($zero, $dwa, $tablicapliku[$i]);//to zastąp w tym wierszu fragment 000 na 222
  24. }
  25. elseif (preg_match($c, $tablicapliku[$i])) //jeśli występuje w wierszu fragment "/ccc/"
  26. {
  27. $tablicapliku[$i]= preg_replace($zero , $trzy, $tablicapliku[$i]);//to zastąp w tym wierszu fragment 000 na 333
  28. }
  29. elseif (preg_match($d, $tablicapliku[$i])) //jeśli występuje w wierszu fragment "/ddd/"
  30. {
  31. $tablicapliku[$i]= preg_replace($zero, $cztery, $tablicapliku[$i]);//to zastąp w tym wierszu fragment 000 na 444
  32. }
  33. elseif (preg_match($e, $tablicapliku[$i])) //jeśli występuje w wierszu fragment "eee"
  34. {
  35. $tablicapliku[$i]= preg_replace($zero, $piec, $tablicapliku[$i]);//to zastąp w tym wierszu fragment 000 na 555
  36. }
  37. }
  38. ?>

plik.txt

aaa xxxxxxxxxxxxxxxxxxxx 000
bbb xxxxxxxxxxxxxxxxxxxx 000
ccc xxxxxxxxxxxxxxxxxxxx 000
ddd xxxxxxxxxxxxxxxxxxxx 000
eee xxxxxxxxxxxxxxxxxxxx 000
fff xxxxxxxxxxxxxxxxxxxx 000
aaa xxxxxxxxxxxxxxxxxxxx 000
bbb xxxxxxxxxxxxxxxxxxxx 000
ccc xxxxxxxxxxxxxxxxxxxx 000
ddd xxxxxxxxxxxxxxxxxxxx 000
eee xxxxxxxxxxxxxxxxxxxx 000
fff xxxxxxxxxxxxxxxxxxxx 000
aaa xxxxxxxxxxxxxxxxxxxx 000
bbb xxxxxxxxxxxxxxxxxxxx 000
ccc xxxxxxxxxxxxxxxxxxxx 000
ddd xxxxxxxxxxxxxxxxxxxx 000
eee xxxxxxxxxxxxxxxxxxxx 000
fff xxxxxxxxxxxxxxxxxxxx 000




edit: nie wiedziałem, że kliknięcie podziękowania oznacza załatwienie problemu w temacie. Musze założyć nowy temat bo nikt tu już nie zaglądnie. W razie co to proszę o usunięcie jednego z tematów

Ten post edytował thepanone 1.01.2014, 21:40:54
Go to the top of the page
+Quote Post
Kshyhoo
post 1.01.2014, 20:48:08
Post #4





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Cytat(thepanone @ 1.01.2014, 20:35:54 ) *
edit: nie wiedziałem, że kliknięcie podziękowania oznacza załatwienie problemu w temacie. Musze założyć nowy temat bo nikt tu już nie zaglądnie. W razie co to proszę o usunięcie jednego z tematów

Człowieku, 1 stycznia wymagasz, żeby ludzie na rzęsach pomagali w pisaniu skryptów? Daj ludziom odpocząć i sam wykaż się inicjatywą...


--------------------
Go to the top of the page
+Quote Post
thepanone
post 1.01.2014, 20:52:28
Post #5





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 14.01.2013

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


a czy je domofonem dzwonie po ludziach? Nie zgłaszam zastrzeżeń, że nikt mi nie odpisuje w po 2 minutach, tłumaczę się dlaczego zakładam nowy temat.

Nikt tu nie wejdzie bo temat jest oznaczony jako załatwiony (żółty).
Go to the top of the page
+Quote Post
com
post 1.01.2014, 21:29:41
Post #6





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


No chyba nie, bo nie takie zasady panują na tym forum, a jak już sam nie potrafisz rozwiązać tego błędu to pytasz o to google ono zna odpowiedź, a jak nie zna to przychodzisz do nas a nie na odwrót wink.gif
Go to the top of the page
+Quote Post
Kshyhoo
post 1.01.2014, 21:38:15
Post #7





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Liczysz, że ktoś zrobi wszystko za Ciebie? Dlaczego to piszę?
Cytat(thepanone @ 1.01.2014, 20:35:54 ) *
Po odpaleniu skryptu z plik2.php przeglądarka zgłasza dwa błedy:
1. Warning: Unknown: failed to open stream: No such file or directory in Unknown on line 0
2. Fatal error: Unknown: Failed opening required 'C:/wamp/www/folder/plik2.php' (include_path='.;C:\php\pear') in Unknown on line 0

1. Użyj translatora Google, żeby przetłumaczyć treść komunikatu a dowiesz się, dlaczego masz ten błąd. Jeżeli nie znasz podstaw angielskiego, to musisz to nadrobić, bo nazwy funkcji są po angielsku.
2. Sprawdź wpierw, co zwraca pobranie danych z pliku, np. tak:
  1. var_dump($tablicapliku[$i]);


Wyciągnij wnioski, popraw kod i wróć, jeżeli będziesz potrzebował pomocy, ale z prawdziwymi problemami.


--------------------
Go to the top of the page
+Quote Post
thepanone
post 1.01.2014, 21:44:35
Post #8





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 14.01.2013

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


składnia poprawiona. Skrypt nie modyfikuje mi pliku tekstowego. Proszę o wskazówkę.
  1. <?php
  2. $tablicapliku = file("plik.txt");//wczytanie całego pliku w tablicę. Każdy wiersz jako osobny element tablicy. plik ma 15 wierszy
  3. $a = "/aaa/";
  4. $b = "/bbb/";
  5. $c = "/ccc/";
  6. $d = "/ddd/";
  7. $e = "/eee/";
  8. $zero = "/000/";
  9. $jeden = "/111/";
  10. $dwa = "/222/";
  11. $trzy = "/333/";
  12. $cztery = "/444/";
  13. $piec = "/555/";
  14.  
  15. for ( $i = 0; $i < 15; $i ++ )
  16. {
  17. if (preg_match($a, $tablicapliku[$i])) //jeśli występuje w wierszu fragment "abc"
  18. {
  19. $tablicapliku[$i]= preg_replace( $zero, $jeden , $tablicapliku[$i]);//to zastąp w tym wierszu fragment 000 na 111
  20. }
  21. elseif (preg_match($b, $tablicapliku[$i])) //jeśli występuje w wierszu fragment "/bbb/"
  22. {
  23. $tablicapliku[$i]= preg_replace($zero, $dwa, $tablicapliku[$i]);//to zastąp w tym wierszu fragment 000 na 222
  24. }
  25. elseif (preg_match($c, $tablicapliku[$i])) //jeśli występuje w wierszu fragment "/ccc/"
  26. {
  27. $tablicapliku[$i]= preg_replace($zero , $trzy, $tablicapliku[$i]);//to zastąp w tym wierszu fragment 000 na 333
  28. }
  29. elseif (preg_match($d, $tablicapliku[$i])) //jeśli występuje w wierszu fragment "/ddd/"
  30. {
  31. $tablicapliku[$i]= preg_replace($zero, $cztery, $tablicapliku[$i]);//to zastąp w tym wierszu fragment 000 na 444
  32. }
  33. elseif (preg_match($e, $tablicapliku[$i])) //jeśli występuje w wierszu fragment "eee"
  34. {
  35. $tablicapliku[$i]= preg_replace($zero, $piec, $tablicapliku[$i]);//to zastąp w tym wierszu fragment 000 na 555
  36. }
  37. }
  38. ?>


plik.txt

aaa xxxxxxxxxxxxxxxxxxxx 000
bbb xxxxxxxxxxxxxxxxxxxx 000
ccc xxxxxxxxxxxxxxxxxxxx 000
ddd xxxxxxxxxxxxxxxxxxxx 000
eee xxxxxxxxxxxxxxxxxxxx 000
fff xxxxxxxxxxxxxxxxxxxx 000
aaa xxxxxxxxxxxxxxxxxxxx 000
bbb xxxxxxxxxxxxxxxxxxxx 000
ccc xxxxxxxxxxxxxxxxxxxx 000
ddd xxxxxxxxxxxxxxxxxxxx 000
eee xxxxxxxxxxxxxxxxxxxx 000
fff xxxxxxxxxxxxxxxxxxxx 000
aaa xxxxxxxxxxxxxxxxxxxx 000
bbb xxxxxxxxxxxxxxxxxxxx 000
ccc xxxxxxxxxxxxxxxxxxxx 000
ddd xxxxxxxxxxxxxxxxxxxx 000
eee xxxxxxxxxxxxxxxxxxxx 000
fff xxxxxxxxxxxxxxxxxxxx 000
Go to the top of the page
+Quote Post
com
post 1.01.2014, 21:48:13
Post #9





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


wszytko pięknie tylko gdzie zapisujesz do tego pliku?
Go to the top of the page
+Quote Post
thepanone
post 1.01.2014, 22:05:26
Post #10





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 14.01.2013

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


ekstra, wreszcie prawie to działa. jest jeszcze jeden problem

dodałem ostatnich 5 linijek kodu, skrypt wygląda tak :
  1. <?php
  2. $tablicapliku = file("plik.txt");//wczytanie całego pliku w tablicę. Każdy wiersz jako osobny element tablicy. plik ma 15 wierszy
  3.  
  4. $a = "/aaa/";
  5. $b = "/bbb/";
  6. $c = "/ccc/";
  7. $d = "/ddd/";
  8. $e = "/eee/";
  9. $zero = "/000/";
  10. $jeden = "/111/";
  11. $dwa = "/222/";
  12. $trzy = "/333/";
  13. $cztery = "/444/";
  14. $piec = "/555/";
  15.  
  16. for ( $i = 0; $i < 15; $i ++ )
  17. {
  18. if (preg_match($a, $tablicapliku[$i])) //jeśli występuje w wierszu fragment "aaa"
  19. {
  20. $tablicapliku[$i]= preg_replace( $zero, $jeden , $tablicapliku[$i]);//to zastąp w tym wierszu fragment 000 na 111
  21.  
  22. }
  23. elseif (preg_match($b, $tablicapliku[$i])) //jeśli występuje w wierszu fragment "/bbb/"
  24. {
  25. $tablicapliku[$i]= preg_replace($zero, $dwa, $tablicapliku[$i]);//to zastąp w tym wierszu fragment 000 na 222
  26. }
  27. elseif (preg_match($c, $tablicapliku[$i])) //jeśli występuje w wierszu fragment "/ccc/"
  28. {
  29. $tablicapliku[$i]= preg_replace($zero , $trzy, $tablicapliku[$i]);//to zastąp w tym wierszu fragment 000 na 333
  30. }
  31. elseif (preg_match($d, $tablicapliku[$i])) //jeśli występuje w wierszu fragment "/ddd/"
  32. {
  33. $tablicapliku[$i]= preg_replace($zero, $cztery, $tablicapliku[$i]);//to zastąp w tym wierszu fragment 000 na 444
  34. }
  35. elseif (preg_match($e, $tablicapliku[$i])) //jeśli występuje w wierszu fragment "eee"
  36. {
  37. $tablicapliku[$i]= preg_replace($zero, $piec, $tablicapliku[$i]);//to zastąp w tym wierszu fragment 000 na 555
  38. }
  39. }
  40. //zamiana tablicy w string
  41. $string = implode($tablicapliku);
  42. //zapisanie nowej tablicy i zamkniecie pliku
  43. $ciagzapisu = $string;
  44. $usun = fopen("plik.txt",'wb');
  45. fwrite($usun, $ciagzapisu);
  46. fclose($usun);
  47. ?>


natomiast rezultat jest taki:

aaa xxxxxxxxxxxxxxxxxxxx /111/
bbb xxxxxxxxxxxxxxxxxxxx /222/
ccc xxxxxxxxxxxxxxxxxxxx /333/
ddd xxxxxxxxxxxxxxxxxxxx /444/
eee xxxxxxxxxxxxxxxxxxxx /555/
fff xxxxxxxxxxxxxxxxxxxx 000
aaa xxxxxxxxxxxxxxxxxxxx /111/
bbb xxxxxxxxxxxxxxxxxxxx /222/
ccc xxxxxxxxxxxxxxxxxxxx /333/
ddd xxxxxxxxxxxxxxxxxxxx /444/
eee xxxxxxxxxxxxxxxxxxxx /555/
fff xxxxxxxxxxxxxxxxxxxx 000
aaa xxxxxxxxxxxxxxxxxxxx /111/
bbb xxxxxxxxxxxxxxxxxxxx /222/
ccc xxxxxxxxxxxxxxxxxxxx /333/
ddd xxxxxxxxxxxxxxxxxxxx 000
eee xxxxxxxxxxxxxxxxxxxx 000
fff xxxxxxxxxxxxxxxxxxxx 000


czyli w efekcie zamienia jak trzeba ale dodaje znaki "/", które musiałem dodać przy definicji zmiennych bo interpreter krzyczał, że ich potrzebuje: preg_replace(): Delimiter must not be alphanumeric or backslash.

Jak się ich pozbyć tylko w tych miejscach, które skrypt dodał?

Ten post edytował thepanone 1.01.2014, 23:21:02
Go to the top of the page
+Quote Post
com
post 2.01.2014, 00:18:04
Post #11





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


bo tego wymagał 1 parametr czyli pattern a nie to na co zamieniasz, manual http://pl1.php.net/preg_replace

http://ideone.com/Klx1Ze
Go to the top of the page
+Quote Post
thepanone
post 2.01.2014, 00:36:06
Post #12





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 14.01.2013

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


wszystko gra tak jak chciałem


...lecz i tak wszystko na marne

w rzeczywistości mam spory plik xml, który po otwarciu w edytorze tekstowym lub w dreaweaverze jest poczochrany bez stałej ilości wierszy . Otworzyłem go w jakimś viewerze xml online, tam ładnie mi go powierszował, zapisałem to jako .txt, poprzestawiałem z Twoją pomocą powyższym skryptem PHP tak jak chciałem, ale teraz ten plik txt po zamianie na .xml generuje w przeglądarce taki błąd:


"Nie można wyświetlić strony XML
Nie można przeglądać wejścia XML przy użyciu arkusza stylów . Popraw błąd, a następnie kliknij przycisk Odśwież lub spróbuj ponownie później.


--------------------------------------------------------------------------------

Nieprawidłowa wartość na najwyższym poziomie dokumentu. Błąd podczas przetwarzania zasobu 'file:///C:/Documents and Setting...

<?xml version="1.0" encoding="utf-8" ?> "


w zasadzie to już całkiem nowy wątek, ale jeśli wiesz co z tym fantem teraz zrobić to nie czuł bym się jak frajer.
Go to the top of the page
+Quote Post
com
post 2.01.2014, 00:49:06
Post #13





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


skoro to xml to raczej powinieneś tego użyć http://us2.php.net/manual/pl/refs.xml.php tam jest odczyt i zapis itp wink.gif
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 Wersja Lo-Fi Aktualny czas: 13.08.2025 - 22:46