Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Automat do zamiany fragmentów kodów plikach
Michael2318
post
Post #1





Grupa: Zarejestrowani
Postów: 651
Pomógł: 116
Dołączył: 3.06.2012
Skąd: Lędziny

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


Chcę zrobić sobie automat, który zamieni mi w wybranych plikach, wskazane fragmenty na nowe. Napisałem sobie 'coś', lecz niestety to w ogóle nie chce zamieniać podanych przeze mnie kodów.

Część odpowiedzialna za zamiane:

  1. $path = 'plik.tpl';
  2.  
  3. $find[1] = '<td class="catHead" colspan="7" height="28"><span class="cattitle">&nbsp;test</span></td>';
  4. $replacement[1] = 'test';
  5. $find[2] = '<td nowrap class="row1" align="left" valign="middle">';
  6. $replacement[2] = '<div id="costam">';
  7.  
  8.  
  9. $fp = fopen($path, "r");
  10. $old_data = fread($fp, filesize($path));
  11. fclose($fp);
  12. $not_replace = '';
  13. for($i = 1; $i <= 2; $i++)
  14. {
  15. $new_data = str_replace($find[$i], $replacement[$i], $old_data, $count);
  16. if ( $count == 0 )
  17. {
  18. $not_replace .= '<br><span style="color: red;">Nie zamieniono:<br><b>'.$find[$i].'</b> na:<br><b>'.$replacement[$i].'</b>';
  19. }
  20. }
  21. $fp = fopen($path.'index_body.tpl', "w");
  22. fputs($fp, $new_data);
  23. fclose($fp);
  24.  
  25. if ( $not_replace == '' )
  26. {
  27. echo 'Zamieniono poprawnie!';
  28. }
  29. else
  30. {
  31. echo $not_replace;
  32. }


Ktoś mi powie czemu to nie łapie? Rozumiem, gdyby były jakieś odstępy czy coś, ale póki co, to są pojedyncze linie kodów, więc nie rozumiem czemu to nie chce załapać.

EDIT:

Jak echuję strlen($old_data) przed i po zamianie to niby jest jakieś 100 znaków różnicy, ale te wskazane fragmenty nie są nadal zamienione.

Ten post edytował Michael2318 24.01.2013, 22:11:05
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Po pierwsze i najważniejsze:
nie:
$new_data = str_replace($find[$i], $replacement[$i], $old_data, $count);
a:
$old_data = str_replace($find[$i], $replacement[$i], $old_data, $count);

Przecież robisz to w petli, wiec musisz zawsze operować na tym samym zbiorze danych. Później do pliku też masz zapisać $old_data.


No i drugie najważniejsze: jesteś pewien na 100% ze szukane ciągi znajduję się w tym pliku? Dokładnie takie? Nie ma tam białych znaków, których nie widzisz? Daj nam lepiej do ściągnięcia ten plik
Go to the top of the page
+Quote Post
lukaskolista
post
Post #3





Grupa: Zarejestrowani
Postów: 872
Pomógł: 94
Dołączył: 31.03.2010

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


Jezeli ma to byc narzedzie do edycji kodu aplikacji, to nie lepiej skorzystac w gotowego oprogramowania do tego celu? Juz prosty notepad++ ma opcje zamiany fraz w plikach z uwzglednieniem wyrazen regularnych
Go to the top of the page
+Quote Post
Michael2318
post
Post #4





Grupa: Zarejestrowani
Postów: 651
Pomógł: 116
Dołączył: 3.06.2012
Skąd: Lędziny

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


Owszem, są tam białe znaki, ale to chyba nie robi różnicy? Białe znaki są przed szukanymi fragmentami.
Go to the top of the page
+Quote Post
nospor
post
Post #5





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Pytam się o białe znaki w szukanych rzeczach a nie przed czy po.
Skoro ci nie znajduje, to ciągi się różnią.

Proszę udestępnij nam swój plik, to szybciej sprawdzę co jest nie tak. ALe Twoja sprawa. TY masz problem nie ja.
Go to the top of the page
+Quote Post
Michael2318
post
Post #6





Grupa: Zarejestrowani
Postów: 651
Pomógł: 116
Dołączył: 3.06.2012
Skąd: Lędziny

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


Pewnie, już daję.
Tutaj jest cały plik: http://www.wklej.org/id/937494/
A szukane fragmenty:

  1. $find[1] = '<td class="catHead" colspan="7" height="28"><span class="cattitle">&nbsp;{L_REGIST_TITLE}</span></td>';
  2. $replacement[1] = '<td class="catHead" colspan="9" height="28"><span class="cattitle">&nbsp;{L_REGIST_TITLE}</span></td>';
  3. $find[2] = '<td nowrap class="row1" align="left" valign="middle">';
  4. $replacement[2] = '<td nowrap class="row1" align="left" valign="middle" colspan="3">';
  5. $find[3] = '<td class="row1" align="left" valign="middle"><input type="text" class="post" onFocus="Active(this)" onBlur="NotActive(this)" style="width:120px" name="email" size="25" maxlength="255" value=""></td>';
  6. $replacement[3] = '<td class="row1"><input type="text" class="post" style="width:120px" name="email1" size="25" maxlength="200" value="" /></td>'."\n".'<td class="row1"><span class="genmed">@</span></td>'."\n".'<td class="row1"><input type="text" class="post" style="width:120px" name="email2" size="25" maxlength="200" value="" /></td>';


Trzeci find i replace się zamieniają, 1 i 2 już nie. Podmieniłem wszędzie na $old_data.

EDIT:

Działa ! Dzięki (IMG:style_emoticons/default/exclamation.gif)

I jeszcze tak na przyszłość - co jeśli będę chciał znaleźć np ten fragment:

Kod
  <tr>
   <td class="row1"><span class="gen">{BOARD_MSG}</span></td>
  </tr>


Tam są białe znaki wcześniej, odstępy (\n) i inne wianki :/

Ten post edytował Michael2318 25.01.2013, 15:09:18
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 25.08.2025 - 12:07