Модераторы: ginnie, JackYF
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разный результат скрипта 
:(
    Опции темы
Сisa
Дата 18.12.2014, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 18.1.2013

Репутация: нет
Всего: нет



Скрипт при неоднократном выполнении показывает разные результаты.
Почему то :(

Код

#!/usr/bin/perl
$tmp3=qq~<p>asasdasdasdfdf,&nbsp;tgtgtgtgtgtgt
 asdfdsf <img alt="smile" src="tfghgfhgf/afadsfsdf/aswfde/efwef/erfewr.gif">&nbsp;hgbjhbjhbjh
 fff "rfgffdg" (ytjutyuyt) , ytuy y "?y&nbsp;yyyyyyyy" (yyyyyyyy
 yy! <img alt="smile" src="nijnne/inn/jinhjn/ok/smile.gif<p>jkjbnkjkjbnk</p>bhbjhbjhbvjhvjhvjh
<div style='background-color: #66CC00;'>444444 Not44444</div>n></p
</div>
<span>abcd/span>>
~;
print "$tmp3\n --------- \n";
%hash = (
"\n"=>'',
'>>'=>'>>~~~',
'<<'=>'<<~~~',
'</p>'=>'</p>~~~',
'</p<'=>'</p>~~~<',
'</p>'=>'</p>~~~',
'</div>'=>'</div>~~~',
'</a>'=>'</a>~~~','<a>'=>'~~~<a>',
'<br>'=>'<br>~~~','<br />'=>'<br>~~~','<br/>'=>'<br>~~~',
'<section>'=>'~~~<section>','<header>'=>'~~~<header>','<footer>'=>'<footer>~~~','<hgroup>'=>'~~~<hgroup>',
'<time>'=>'<time>~~~','<nav>'=>'~~~<nav>','<mark>'=>'~~~<mark>',
'</u>'=>'~~~</u>~~~',
'</sup>'=>'</sup>~~~','</sub>'=>'</sub>~~~',
'</H1>'=>'</H1>~~~','</H2>'=>'</H2>~~~','</H3>'=>'</H3>~~~','</H4>'=>'</H4>~~~','</H5>'=>'</H5>~~~','</H6>'=>'</H6>~~~','<H1>'=>'~~~<H1>','<H2>'=>'~~~<H2>','<H3>'=>'~~~<H3>','<H4>'=>'~~~<H4>','<H5>'=>'~~~<H5>','<H6>'=>'~~~<H6>',
'</li>'=>'</li>~~~','<ol>'=>'<ol>~~~','</ol>'=>'</ol>~~~',
'<blockquote>'=>'~~~<blockquote>','</blockquote>'=>'</blockquote>~~~',
'<applet>'=>'~~~<applet>',
'<area>'=>'~~~<area>',
'<article>'=>'~~~<article>',
'<sup>'=>'~~~<sup>','</sup>'=>'</sup>~~~',
'<sub>'=>'~~~<sub>','</sub>'=>'</sub>~~~',
'<aside>'=>'~~~<aside>',
'<article>'=>'~~~<article>',
'<address>'=>'~~~<address>',
'<audio>'=>'<audio>',
'<base>'=>'<base>~~~',
'<basefont>'=>'~~~<basefont>',
'<bdi>'=>'~~~<bdi>',
'<bdo>'=>'~~~<bdo>',
'<bgsound>'=>'~~~<bgsound>',
'<blockquote>'=>'~~~<blockquote>',
'<big>'=>'~~~<big>',
'<body>'=>'~~~<body>',
'<blink>'=>'~~~<blink>',
'<br>'=>'<br>~~~',
'<button>'=>'~~~<button>',
'<canvas>'=>'<canvas>~~~',
'<caption>'=>'~~~<caption>',
'<center>'=>'~~~<center>','</center>'=>'</center>~~~',
'<cite>'=>'~~~<cite>',
'<code>'=>'~~~<code>',
'<col>'=>'~~~<col>',
'<colgroup>'=>'~~~<colgroup>',
'<command>'=>'~~~<command>',
'<comment>'=>'~~~<comment>',
'<div'=>'~~~<div',
'<iframe>'=>'~~~<iframe>',
'<li>'=>'~~~<li>',
'<link>'=>'~~~<link>',
'<script>'=>'~~~<script>~~~',
'</script>'=>'~~~<script>~~~',
'<style>'=>'~~~<style>',
'<table>'=>'~~~<table>',
'<tbody>'=>'~~~<tbody>',
'<td>'=>'~~~<td>',
'<textarea>'=>'~~~<textarea>',
'<tr>'=>'~~~<tr>',
'<img'=>'~~~<img',
'<p'=>'~~~<p',
'<div'=>'~~~<div',
'<<'=>'~~~<',
'>>'=>'>~~~',
'~~~'=>"\n"
);
my @k;
while(my($key,$value) = each %hash){
 #print "$key => $value \n";
 #$tmp3 =~ s/$key/$value/gi;
 #$tmp3= join($value,split($key,$tmp3));
 @k= split($key,$tmp3); $tmp3= join($value,@k); @k =();
};
print $tmp3;

Ну так же не должно вроде быть, 
и как его стабилизировать? 
PM MAIL   Вверх
tzirechnoy
Дата 18.12.2014, 00:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: нет
Всего: 16



Цитата
Ну так же не должно вроде быть, 


Почему Вы так думаете?

Цитата
и как его стабилизировать? 


Ну, например, сделать так, чтобы последовательность преобразований была фиксированной.
Впрочем, есть масса способов, конечно.
PM MAIL   Вверх
Сisa
Дата 18.12.2014, 00:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 18.1.2013

Репутация: нет
Всего: нет



Почему Вы так думаете? 
:(((( нууу потому что, а кто его знает почему, потому что работа ведется с одной и той же строкой? по одним и тем же прописанным скрипте правилам.
Так 2+2 всегда даст один и тот же ответ, какими бы процессами не был занят в это время компьютер.  Перл это же не угадайка? типа а что в ответе мы получим в этот раз?


Ну, например, сделать так, чтобы последовательность преобразований была фиксированной.
т.е. группу разбить на более мелкие части, или даже поштучно?
Я вчера пробовал примерно так же, но со списком условий, ответ был примерно такой же.

Добавлено через 14 минут и 59 секунд
Со списком пробовал, с хешем пробовал, с регулярками, со сплит-джоин тоже пробовал,
осталось еще попробовать циклом перебирать посимвольно строку  для каждого из заменных условий, тем самым выполнить работу регулярного выражения, но это же работа за перл, т.е. ручками?
Нет, наверно надо поштучно все таки попробовать, но странно как то получать такие неодинаковые ответы скрипта.
PM MAIL   Вверх
tzirechnoy
Дата 18.12.2014, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: нет
Всего: 16



Цитата
Так 2+2 всегда даст один и тот же ответ


А выстрел в голову -- всегда разный разлёт. Жызнь несправделива.

Цитата
Со списком пробовал


Видать, так пробовали, что я могу сказать.

И да, Ваша проблема, разумеется, не в сплит-джойн (который вполне нормальный), а в each. И в each дажэ есть ссылка -- почему Вам сделали постоянную проблему (впрочем, очень правильно сделали -- а то проблема была бы переменной и редко отлавливаемой).

И Вы вполне могли бы понять это сами, если бы попытались взять бумажку и вычислить полученное, а затем сравнить выполнение (через print в цыкле) с Вашыми ожыданиями.
PM MAIL   Вверх
Сisa
Дата 18.12.2014, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 18.1.2013

Репутация: нет
Всего: нет



The each hash iterator has two problems .... Это один из старейших perl5 ошибок, которые никогда не будут исправлены.    each .. Избегайте ее как чумы.
"The hash iterators should have really been stored in the op, not the hash. This is one of the oldest perl5 bugs which will never be fixed."

Вот те раз,  две проблемы, а я то думал smile
Баги в перле? Ну тогда уж точно надо ручками, и в цикле, и поштучно, а лучше посимвольно, и из массы способов надо просто правильно писать сам хтмл чтобы его потом не править, а то выстрел не то что пробовать, но даже видеть и слышать  не хочется.

tzirechnoy спасибо!
PM MAIL   Вверх
tzirechnoy
Дата 22.12.2014, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: нет
Всего: 16



Цитата
The each hash iterator has two problems


Я не знаю, почему этот чувак пишэт "which almost nobody is aware of". Оба этих свойства (которые становятся проблемой только если сделать что-то, что их не учитывает) -- вполне очевидны, поскольку во-первых написаны в (небольшой) документацыи а во-вторых можно и самому понять, что реализацыя будет именно такой.
PM MAIL   Вверх
Pfailed
Дата 24.12.2014, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 19.7.2009

Репутация: 6
Всего: 39



Хэш не поддерживает порядок элементов. Для вашего случая больше подойдет массив, по которому можно итерироваться через два элемента

Код

@list = (
  "\n"=>'',
   '>>'=>'>>~~~',
   ...
);

for (my $i=0; $i<@list; $i+=2) {
  my ($key, $val) = @list[$i, $i+1];
  ...
}



--------------------
PM MAIL   Вверх
Сisa
Дата 25.12.2014, 00:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 18.1.2013

Репутация: нет
Всего: нет



Pfailed - именно так я и сделал, списком и парами  $i+=2, все работает отлично, спасибо!
PM MAIL   Вверх
Google
  Дата 15.11.2019, 08:13 (ссылка)  





  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Регулярные выражения | Следующая тема »


 




[ Время генерации скрипта: 0.1253 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.