Forum Webscript.Ru
Программирование => Perl => Тема начата: Отец Никон от 10 Января 2003, 23:40:54
-
В моем форуме в сообщениях есть разметка типа:
...
Эти тэги размечают текст ответа на тему, и их может быть несколько.
Хотелось бы узнать вот что:
При модерировании желательна возможность правки конкретного ответа. Как сделать, чтобы если я передаю, напр. "6" в скрипт, он бы находил шестой по счету , далял записанный там текст и писал новый?
-
perldoc perlsyn в части For Loops
perldoc perlre
-
Ну и что дальше? с циклами я умею работать.
1 Во-первых, как я найду именно 6-ой по счету тэг? Пожалуйста, дай код. С рег. выражениями я пока разбираюсь, но они сложны для меня. Хотелось бы поучиться на реальных примерах.
2 Во-вторых, надо ведь удалить весь текст между этими тэгами. Если каждую строку читать в массив, то это значит, что надо перемещать часть массива, идущую после этого тэга. Как?
-
Ну и что дальше? с циклами я умею работать.
1 Во-первых, как я найду именно 6-ой по счету тэг?
А счетчик внутри цикла поставить сможешь?
Есть более элегантное решение, но для понимания принципов оно не подойдет.
Если каждую строку читать в массив, то это значит, что надо перемещать часть массива, идущую после этого тэга.
Куда и что перемещать? Вы понимаете что такое массив?
-
Отец Никон Набросал за минуту, дальше сам думай...
my $n = 6; # твое 6
my $i = 1;
my $body;
while ($text =~ m/(.*)?<\\/response>/gi)
{
$body = $1;
last if $i++ == $n;
};
print $body;
найдет вложение заданное $n
2. Какой нахрен массив??? считай что весь текст хранится в перле как простая переменная, включая переносы строк итп лабуду... и все можно делать за раз...
-
dymka
Ну ладно, нашел я этот шестой n. Но ведь надо ещё и текст всатвить. Попробую объяснить на примере. Допустим, у меня есть текст:
1
2
3
4
5
Мне надо отредактировать это текст так:
1
2
3
4
5
6
7
8
Т.е. закрывающий тэг и весь следующий после него текст (который есть, я его просто тут не привожу) надо передвинуть. Как это сделать?
NeoNox
Вы понимаете что такое массив?
Я думал, что массив в Перле - то же самое, что и в С. Т.е. последовательность переменных, к какждой из которых можно обратится по ее индексу. Или нет?
-
Ну ладно, нашел я этот шестой n. Но ведь надо ещё и текст всатвить.
#разметка тэгов
my $i = 1;
while ($mess =~ s|<(responce)>(.*?)(responce)>|<$1$i>$2$3$i>|is)
{
$i++;
}
my $n = 6;
#замена
$mess =~ s|<(responce)$n>(.*?)(responce)$n>|<$1>$tgt$3>|is;
#очистка разметки
$mess =~ s|<(responce)\\d+>|<$1>|i;
$mess =~ s|(responce)\\d+>|$1>|i;
-
Chs
Ты уж меня, убогого, извини :)
Я что-то не понял, где тут у тебя переменная, которая заменяет? $tgt?
-
Я что-то ни не понял, где тут у тебя переменная, которая заменяет? $tgt?
Да.