Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Podmiana znaków
maax990
post 17.01.2018, 08:16:13
Post #1





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 19.07.2017

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


Witam mam string $str = 'jdjfksaakfsdnfjXXXXdashfadnvlzvlfam' i potrzebuje podmienić w nim kilka liter.Znam początek ale nie znam liter w miejscu które chce podmieniać: kfsdnfjXXXX gdzie kfsdnfj znam a xxxx nie.Jak mogę to zrobić znając część liter oraz ilość liter do podmiany?questionmark.gif
Go to the top of the page
+Quote Post
nospor
post 17.01.2018, 08:43:03
Post #2





Grupa: Moderatorzy
Postów: 36 448
Pomógł: 6292
Dołączył: 27.12.2004




Najszybciej i najlatwiej
http://php.net/manual/en/function.preg-replace.php



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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
maax990
post 17.01.2018, 21:46:33
Post #3





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 19.07.2017

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


Dziękuje za szybką odpowiedź, poćwiczyłem wg twojego linka z 4h, umie już zmieniać słowa kasować lub dodawać spacje , zastępować je czymś innym , ogólnie bardzo przydatna lekcja,nie umie natomiast zmusić skryptu do wykonania podmiany x znaków po określonym ciągu , dodam również ze jestem bardzo początkującym w php a ułatwiło by mi to pracę.Z góry dziękuje za dalsze podpowiedzi.
Go to the top of the page
+Quote Post
trzczy
post 17.01.2018, 22:44:02
Post #4





Grupa: Zarejestrowani
Postów: 460
Pomógł: 49
Dołączył: 5.06.2011

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


Można tak:

.....

albo tak

.{5}

Kropka to dowlny znak niebędący końcem linii.
Go to the top of the page
+Quote Post
maax990
post 18.01.2018, 08:20:31
Post #5





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 19.07.2017

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


ehmm kolejne 4h na probie stworzenia czegoś poległy,za świeży w tym jestem. Pozostanie mi się poddać pewno trzeba poćwiczyć zeby nabrać skila.Prosze mi jeszcze tylko napisać czy poprzez preg_preplace mogę to zrobić w ten sposób że cześć która znam czyli "alamakotaajanie" gdzie w stringu nie znam "kota" mogę podmienić niewiadomą w sposób "ama...." gdzie niewiadome czyli kropi z gory okrestam ze to ma być np 0 i określam ilość zer jaka mam wstawić po "ama" task zeby nie zwiekszyc objętości tekstu tylko podmieniać kolejne znaki na z góry ustalona ilość zer?
Go to the top of the page
+Quote Post
viking
post 18.01.2018, 08:33:08
Post #6





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


Pobaw się http://php.net/manual/en/function.stripos.php str_replace i podobnymi. Z tego opisu ciężko wywnioskować jak ten string wygląda (stała czy zmienna ilość znaków, stały czy zmienny napis).
BTW. Zawsze mnie to razi. Ja umiem, ty umiesz, on/ona/ono umie. To tak jakbyś pisał "Ja Polaka".


--------------------
Go to the top of the page
+Quote Post
maax990
post 18.01.2018, 08:45:38
Post #7





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 19.07.2017

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


Dziękuję za odpowiedź,jeśli źle złożyłem zdanie to sorki.Tak tego zapomniałem napisać pliki o jednym ciągu string mają od 500kb do 2000kb , string podmiany jest przykładowy a ilość miejsc podmiany (niewiadomej ....) jest w każdym pliku inna.Z str_replace korzystam już od kilku dni do czegoś innego i działa świetnie, jednak nie udało mi się tego zastosować do podmiany niewiadomych znaków.
Go to the top of the page
+Quote Post
Pyton_000
post 18.01.2018, 08:48:58
Post #8





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


  1. $str = 'alamakotaajanie';
  2.  
  3. $replacement = '${1}'.str_repeat('0', 4).'${3}';
  4. var_dump(preg_replace('/(.*?ama)(.{4})(.*)/', $replacement, $str));
Go to the top of the page
+Quote Post
maax990
post 18.01.2018, 21:26:18
Post #9





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 19.07.2017

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


Na pewno na tym poziomie wiedzy bym tego sam nie napisał .Dziekuje

Troszkę się pospieszyłem,działa ale np przy długim pliku 2mb szuka tekstu tylko do około 1/3 długości pliku.Jeśli tego nie przekroczymy to zapisze plik ze zmianami i jest luksus, jeśli natomiast przekroczymy tą długość to nie robi nic , echo nie wyrzuca na ekran nic a i plik zapisywany ma 0kb.Czy ktoś wie czemu się tak dzieje lub jak to naprawić?
Go to the top of the page
+Quote Post
SmokAnalog
post 18.01.2018, 21:33:32
Post #10





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Podaj przykład co dokładnie chcesz zamienić?
Go to the top of the page
+Quote Post
maax990
post 18.01.2018, 21:48:58
Post #11





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 19.07.2017

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


Dodaje pliki skrypt oraz binarka.Mam nadzieje ze nie popełniam tu jakiejś zbrodni dodając tu tego linka smile.gif.Tak może będzie najlepiej wyjaśnić o co mi chodzi.
Link
Go to the top of the page
+Quote Post
SmokAnalog
post 18.01.2018, 23:26:46
Post #12





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Co jest w tym binarnym pliku? Taka zamiana z wyrażeniami regularnymi nie wydaje mi się najlepszym pomysłem.
Go to the top of the page
+Quote Post
maax990
post 19.01.2018, 21:13:10
Post #13





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 19.07.2017

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


To zwykle dane sterujące,jest więc odczyt => konwersja bin2hex do ciągu znaków => preg_replace => konwersja hex2bin => zapis pliku , no i wszystko działa ale tylko na małych plikach bo jeśli podstawie np 2mb to tez zmieni ale tylko gdzieś do 1/3 długości , a później się gubi.Nie wiem czemu,oraz jak to zmienić na coś innego lub naprawić.Narazie potrzebuję tego do podmiany w plikach formatu bin, ale później będę musiał działać na zwykłych plikach tekstowych.Dodam tylko ze sama konwersja działa doskonale z samym str_replace , bo jeśli znam wszystkie znaki to ta funkcja działa doskonale na małych i dużych plikach

Nie ma żadnej innej alternatywy?

Ten post edytował maax990 19.01.2018, 07:23:53
Go to the top of the page
+Quote Post
trzczy
post 19.01.2018, 22:39:19
Post #14





Grupa: Zarejestrowani
Postów: 460
Pomógł: 49
Dołączył: 5.06.2011

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


Wystarczy chyba podmieniać ten kawałeczek 'ama....' Wtedy operacja zabiera mniej pamięci serwera. Czyli tak:
  1. echo preg_replace('/ama.{4}/','ama0000',$str);
Go to the top of the page
+Quote Post
trueblue
post 19.01.2018, 22:50:59
Post #15





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


http://php.net/manual/en/function.preg-replace.php#105122


--------------------
Go to the top of the page
+Quote Post
maax990
post 20.01.2018, 16:21:05
Post #16





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 19.07.2017

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


trzczy strzał w dziesiątkę pliki do 2mega idą bez problemu.DZIEKUJE!
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: 23.04.2024 - 08:11