Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Różnice stringów
daris
post 2.02.2008, 14:26:59
Post #1





Grupa: Zarejestrowani
Postów: 78
Pomógł: 4
Dołączył: 7.01.2008

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


Mam przykładowe dwa stringi:
  1. <?php
  2. $str = 'To jest jakiś tekst, który ma coś tam';
  3. $str2 = 'To jest patchowany tekst, który nie ma coś tam';
  4. ?>

i teraz chciałbym znaleźć różnice między nimi, czyli żeby mi wyświetliło coś w rodzaju:
Cytat
To jest jakiś tekst, który ma coś tam
To jest patchowany tekst, który nie ma coś tam


Takie rozwiązanie występuje z tego co widziałem w cvs'ach (system kontroli wersji czy jak to tam się nazwywa). Tutaj przykład (tam jest pewnie to robione na podstawie diff'a ale ja chciałbym to zrobić porównując stringi)

Istnieje już gdzieś taka funkcja? Chicałem sam to napisać ale nie za bardzo wiem na jakiej podstawie to może działać. Trzeba by chyba porównywać znak po znaku.

Ten post edytował daris 4.02.2008, 21:51:08


--------------------
FluxBB - lekki i szybki skrypt forum | Polskie wsparcie FluxBB
Go to the top of the page
+Quote Post
.radex
post 2.02.2008, 19:52:13
Post #2





Grupa: Zarejestrowani
Postów: 1 657
Pomógł: 125
Dołączył: 29.04.2006

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


nie słyszałem o gotowej funkcji, ale w systemach wiki masz coś takiego - możesz zobaczyć jak to działa i na tym się wzorować przy pisaniu własnej funkcji


--------------------
blog | Tadam — minutnik do Pomodoro na Maka :)
Go to the top of the page
+Quote Post
GrayHat
post 2.02.2008, 23:31:21
Post #3





Grupa: Zarejestrowani
Postów: 566
Pomógł: 18
Dołączył: 23.08.2003
Skąd: Łomża

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


W pakiecie PEAR jest biblioteka Text_Diff:
http://pear.php.net/package/Text_Diff


--------------------
*Note: No animals were killed durning the construction of this post.
Go to the top of the page
+Quote Post
daris
post 4.02.2008, 21:48:09
Post #4





Grupa: Zarejestrowani
Postów: 78
Pomógł: 4
Dołączył: 7.01.2008

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


To co podał GrayHat to nie wiem co mam z tym zrobić.

Wziąłem się sam za pisanie odpowiedniej funkcji i już jestem blisko. Sprawdzam nie tak jak wyżej pisałem litera po literze tylko wyraz po wyrazie (na początku dzielę wyrażeniem regularnym bo potem może mi się to przydać jak nie tylko przez spacje będę dzielił)
  1. <?php
  2. function diff($str, $str2) {
  3.  
  4. $ret = preg_split("/[s]/", $str);
  5. $ret2 = preg_split("/[s]/", $str2);
  6.  
  7. echo "<pre>";
  8. echo '<b>pierwszy</b><br />';
  9. print_r($ret);
  10. echo '<b>drugi</b><br />';
  11. print_r($ret2);
  12. $diff = array_diff($ret, $ret2);
  13.  
  14. echo '<b>roznice miedzy 1 a 2</b><br />';
  15. print_r($diff);
  16.  
  17. foreach($ret as $k => $r) {
  18. if ($ret[$k] == $diff[$k]) // jest rozne
  19. echo '<span style="color:red">'.$r.'</span> ';
  20. else
  21. echo $r.' ';
  22. }
  23.  
  24. echo '<br />';
  25.  
  26. echo '<b>roznice miedzy 2 a 1</b><br />';
  27.  
  28. $diff2 = array_diff($ret2, $ret);
  29. print_r($diff2);
  30.  
  31. foreach($ret2 as $k => $r) {
  32. if ($ret2[$k] == $diff2[$k]) // jest rozne
  33. echo '<span style="color:green">'.$r.'</span> ';
  34. else
  35. echo $r.' ';
  36. }
  37.  
  38. echo "</pre>";
  39.  
  40. }
  41. ?>

Tylko że jeszcze nie działa tak jak powinno jak dany tekst istnieje w drugim ale na dalszej pozycji, czyli nie za działa poprawnie dla:
Cytat
To jest jakiś tekst, który ma coś tam
To jest patchowany tekst, który nie ma jakiś coś tam


Ten post edytował daris 4.02.2008, 21:49:46


--------------------
FluxBB - lekki i szybki skrypt forum | Polskie wsparcie FluxBB
Go to the top of the page
+Quote Post
em1X
post 4.02.2008, 21:57:04
Post #5





Grupa: Zarejestrowani
Postów: 984
Pomógł: 41
Dołączył: 16.03.2002
Skąd: Płock

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


Eh Ty się już tyle dni męczysz, a rozwiązanie jest gotowe i można działać w ciągu 5 minut.
Zainstaluj najpierw PEAR. Pobierz bibliotekę text_diff i działaj.


--------------------
eh, co polska wódka to polska wódka
Go to the top of the page
+Quote Post
daris
post 4.02.2008, 22:17:33
Post #6





Grupa: Zarejestrowani
Postów: 78
Pomógł: 4
Dołączył: 7.01.2008

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


Nie lepiej było tak od razu? winksmiley.jpg
Nie wiedziałem że to takie proste:
Kod
pear install text_diff

biggrin.gif coś jak apt-get ;P

OK częściowo już mam to zrobione (rozwaliłem tekst na tablicę - każdy element tablicy to nowy znak), teraz będzie trzeba na podstawie diffa przeparsować html'a tongue.gif


--------------------
FluxBB - lekki i szybki skrypt forum | Polskie wsparcie FluxBB
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: 14.08.2025 - 04:03