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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Удаление файла с переименованием други, для самописного форума 
:(
    Опции темы
n0xi0uzz
Дата 30.12.2004, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



В общем, пишу форум на perl.
Структура хранения топиков такова: все топикик раздела хранятся в папке с номерами от 0 и так далее. Проблема вот в чем. Начал писать админку и при удалении топика (то есть удалении файла (unlink)) последующий вывод остальных топиков невозможен, поскольку нарушается четкая последовательность "от нуля и так далее". Поэтому требуется при удалении топика, во всех остальных топиках, номера файлов которых больше чем удаляемый, нужно переименовывать их файлы на
(новый_номер_файла)=(старый_номер_файла)-1;
Как это проще всего реализовать?

Это сообщение отредактировал(а) n0xi0uzz - 30.12.2004, 12:15
PM MAIL WWW ICQ   Вверх
dimes
Дата 30.12.2004, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(n0xi0uzz @ 30.12.2004, 13:13)
Как это проще всего реализовать?

давай для начала разберемся почему:
Цитата(n0xi0uzz @ 30.12.2004, 13:13)
последующий вывод остальных топиков невозможен, поскольку нарушается четкая последовательность "от нуля и так далее"


Это сообщение отредактировал(а) dimes - 30.12.2004, 12:18
PM ICQ   Вверх
chaos
Дата 30.12.2004, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


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

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



а в чем проблема то?
удаляешь свой файл, потом переименовываешь n на n-1 и удаляешь n вот и все, что тут тне понятного то?

Это сообщение отредактировал(а) chaos - 30.12.2004, 13:01
PM WWW   Вверх
n0xi0uzz
Дата 30.12.2004, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(chaos @ 30.12.2004, 13:00)
а в чем проблема то?
удаляешь свой файл, потом переименовываешь n на n-1 и удаляешь n вот и все, что тут тне понятного то?

да проблем нет, все путем %)
я же спросил, как проще это реализовать, ведь переименовать надо каждый последующий файл после удаляемого ;)

2dimes
потому что вывод осуществляется вот таким циклом (for):
Код

$a=0; #кол-во топиков+1
while (open $b, "sects/$secn/$a.top")
{
 close $b;
 $a++;
}
for ($i=$a-1; $i>=0; $i--)
{
#код
}

и получается, что если удалить, допустим, третий фал, то цикл будет работать некорректно ;)
PM MAIL WWW ICQ   Вверх
dimes
Дата 30.12.2004, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



smile
Неслабо! Хорошо что ты сюда зашел.

while (open $b, "sects/$secn/$a.top") так не делают чтобы перебрать все файлы в каталоге

делай так:
Код

my @list_id;
opendir(DIR,"sects/".$secn) or print $!;# Обработку ошибки либо убери либо свое что то поставь
for ( grep { index($_,".top")>0 } readdir(DIR) ){
 my $_id=0+$_ || next; # Убеждаемся что файл начинается с цифры
 unshift @list_id,$_id;
}
closedir(DIR);

for ( @list_id ){
my $_id=$_;
..........  
}


PM ICQ   Вверх
n0xi0uzz
Дата 30.12.2004, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



а смысл менять цикл while? он ведь в коде только для того, чтобы посчитать кол-во топиков, загнать это количество в переменную и потом использовать в цикле for для вывода топиков ;)
PM MAIL WWW ICQ   Вверх
dimes
Дата 30.12.2004, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Так тебе ID нужно только для того чтобы зделать сортировку и все? И больше это ID нигде не участвует?
А например так:

Код

my $_dir="sects/".$secn;
opendir(DIR,$_dir);
for ( sort { $b<=>$a } grep { index($_,".top")>0 } readdir(DIR) ){
my $_file=$_dir."/".$_;

}
closedir(DIR);

PM ICQ   Вверх
n0xi0uzz
Дата 1.1.2005, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



ну это все конечно хорошо, но это не решает той проблемы, которую я попросил помочь решить в начале топа - переименование файлов ;)
PM MAIL WWW ICQ   Вверх
dimes
Дата 1.1.2005, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



  • Если разбирешся что делает этот скрипт и посмотриш на описание функции rename то легко напишеш сам
  • то что ты считаеш проблеммой, не проблемма а втот считать это проблеммой и есть настоящая проблемма.

PM ICQ   Вверх
n0xi0uzz
Дата 2.1.2005, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



прочитай пожалуйста начало темы ;) проблемой я это не считаю, но если бы я смог это сам написать к вам не обращался. Тем более, я попросил (цитата): "Как это проще всего реализовать?". Чуешь разницу? ;)
PM MAIL WWW ICQ   Вверх
korob2001
Дата 2.1.2005, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

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



Послушай совет про ID. Потому как твой форум, по такому алгоритму, будет работать слишком медленно.


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: CGI программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к CGI программированию
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", качать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: разработка для Web | Следующая тема »


 




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


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

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