Forum Webscript.Ru

Программирование => Perl => Тема начата: Отец Никон от 10 Января 2003, 23:40:54

Название: Ещё один вопрос...
Отправлено: Отец Никон от 10 Января 2003, 23:40:54
В моем форуме в сообщениях есть разметка типа:
...

Эти тэги размечают текст ответа на тему, и их может быть несколько.
Хотелось бы узнать вот что:
При модерировании желательна возможность правки конкретного ответа. Как сделать, чтобы если я передаю, напр. "6" в скрипт, он бы находил шестой по счету , далял записанный там текст и писал новый?
Название: Теги в сообщение форума 2
Отправлено: Chs от 11 Января 2003, 00:02:36
perldoc perlsyn  в части  For Loops
perldoc perlre
Название: Теги в сообщение форума 2
Отправлено: Отец Никон от 11 Января 2003, 00:10:43
Ну и что дальше? с циклами я умею работать.
1 Во-первых, как я найду именно 6-ой по счету тэг? Пожалуйста, дай код. С рег. выражениями я пока разбираюсь, но они сложны для меня. Хотелось бы поучиться на реальных примерах.

2 Во-вторых, надо ведь удалить весь текст между этими тэгами. Если каждую строку читать в массив, то это значит, что надо перемещать часть массива, идущую после этого тэга. Как?
Название: Теги в сообщение форума 2
Отправлено: NeoNox от 11 Января 2003, 01:38:13
Цитировать
Ну и что дальше? с циклами я умею работать.
1 Во-первых, как я найду именно 6-ой по счету тэг?

А счетчик внутри цикла поставить сможешь?
Есть более элегантное решение, но для понимания принципов оно не подойдет.
Цитировать
Если каждую строку читать в массив, то это значит, что надо перемещать часть массива, идущую после этого тэга.

Куда и что перемещать? Вы понимаете что такое массив?
Название: Теги в сообщение форума 2
Отправлено: dymka от 11 Января 2003, 09:46:38
Отец Никон Набросал за минуту, дальше сам думай...

my $n = 6; # твое 6
my $i = 1;
my $body;
while ($text =~ m/(.*)?<\\/response>/gi)
{
  $body = $1;
  last if $i++ == $n;
};

print $body;

найдет вложение заданное $n

2. Какой нахрен массив??? считай что весь текст хранится в перле как простая переменная, включая переносы строк итп лабуду... и все можно делать за раз...
Название: Теги в сообщение форума 2
Отправлено: Отец Никон от 11 Января 2003, 20:06:41
dymka
Ну ладно, нашел я этот шестой n. Но ведь надо ещё и текст всатвить. Попробую объяснить на примере. Допустим, у меня есть текст:


1
2
3
4
5


Мне надо отредактировать это текст так:

1
2
3
4
5
6
7
8

Т.е. закрывающий тэг и весь следующий после него текст (который есть, я его просто тут не привожу) надо передвинуть. Как это сделать?

NeoNox
Цитировать
Вы понимаете что такое массив?

Я думал, что массив в Перле - то же самое, что и в С. Т.е. последовательность переменных, к какждой из которых можно обратится по ее индексу. Или нет?
Название: Теги в сообщение форума 2
Отправлено: Chs от 11 Января 2003, 21:37:31
Цитировать
Ну ладно, нашел я этот шестой n. Но ведь надо ещё и текст всатвить.


#разметка тэгов
my $i = 1;
while ($mess =~ s|<(responce)>(.*?)|<$1$i>$2|is)
{
$i++;
}

my $n = 6;
#замена
$mess =~ s|<(responce)$n>(.*?)|<$1>$tgt|is;
#очистка разметки
$mess =~ s|<(responce)\\d+>|<$1>|i;
$mess =~ s|||i;
Название: Теги в сообщение форума 2
Отправлено: Отец Никон от 12 Января 2003, 22:43:56
Chs
Ты уж меня, убогого, извини :)
Я что-то не понял, где тут у тебя переменная, которая заменяет?  $tgt?
Название: Теги в сообщение форума 2
Отправлено: Chs от 12 Января 2003, 22:47:06
Цитировать
Я что-то ни не понял, где тут у тебя переменная, которая заменяет? $tgt?

Да.