Автор Тема: Ещё один вопрос...  (Прочитано 3473 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Отец Никон

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 52
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Ещё один вопрос...
« : 10 Января 2003, 23:40:54 »
В моем форуме в сообщениях есть разметка типа:
...

Эти тэги размечают текст ответа на тему, и их может быть несколько.
Хотелось бы узнать вот что:
При модерировании желательна возможность правки конкретного ответа. Как сделать, чтобы если я передаю, напр. "6" в скрипт, он бы находил шестой по счету , далял записанный там текст и писал новый?

Оффлайн Chs

  • Perl программер
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1108
  • +0/-0
  • 2
    • Просмотр профиля
    • http://chs.now.at/
Теги в сообщение форума 2
« Ответ #1 : 11 Января 2003, 00:02:36 »
perldoc perlsyn  в части  For Loops
perldoc perlre
2B OR NOT 2B = FF

Оффлайн Отец Никон

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 52
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Теги в сообщение форума 2
« Ответ #2 : 11 Января 2003, 00:10:43 »
Ну и что дальше? с циклами я умею работать.
1 Во-первых, как я найду именно 6-ой по счету тэг? Пожалуйста, дай код. С рег. выражениями я пока разбираюсь, но они сложны для меня. Хотелось бы поучиться на реальных примерах.

2 Во-вторых, надо ведь удалить весь текст между этими тэгами. Если каждую строку читать в массив, то это значит, что надо перемещать часть массива, идущую после этого тэга. Как?

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Теги в сообщение форума 2
« Ответ #3 : 11 Января 2003, 01:38:13 »
Цитировать
Ну и что дальше? с циклами я умею работать.
1 Во-первых, как я найду именно 6-ой по счету тэг?

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

Куда и что перемещать? Вы понимаете что такое массив?
The documentations is your friend

Оффлайн dymka

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 36
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Теги в сообщение форума 2
« Ответ #4 : 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. Какой нахрен массив??? считай что весь текст хранится в перле как простая переменная, включая переносы строк итп лабуду... и все можно делать за раз...

Оффлайн Отец Никон

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 52
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Теги в сообщение форума 2
« Ответ #5 : 11 Января 2003, 20:06:41 »
dymka
Ну ладно, нашел я этот шестой n. Но ведь надо ещё и текст всатвить. Попробую объяснить на примере. Допустим, у меня есть текст:


1
2
3
4
5


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

1
2
3
4
5
6
7
8

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

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

Я думал, что массив в Перле - то же самое, что и в С. Т.е. последовательность переменных, к какждой из которых можно обратится по ее индексу. Или нет?

Оффлайн Chs

  • Perl программер
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1108
  • +0/-0
  • 2
    • Просмотр профиля
    • http://chs.now.at/
Теги в сообщение форума 2
« Ответ #6 : 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;
2B OR NOT 2B = FF

Оффлайн Отец Никон

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 52
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Теги в сообщение форума 2
« Ответ #7 : 12 Января 2003, 22:43:56 »
Chs
Ты уж меня, убогого, извини :)
Я что-то не понял, где тут у тебя переменная, которая заменяет?  $tgt?
« Последнее редактирование: 12 Января 2003, 23:19:31 от Отец Никон »

Оффлайн Chs

  • Perl программер
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1108
  • +0/-0
  • 2
    • Просмотр профиля
    • http://chs.now.at/
Теги в сообщение форума 2
« Ответ #8 : 12 Января 2003, 22:47:06 »
Цитировать
Я что-то ни не понял, где тут у тебя переменная, которая заменяет? $tgt?

Да.
2B OR NOT 2B = FF

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28