Автор Тема: проблема при записи в файл......  (Прочитано 3051 раз)

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

Оффлайн MIg

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 4
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
проблема при записи в файл......
« : 25 Октября 2001, 11:48:09 »
Пишу гостевую книгу. И вот какая проблемка возникает:

У меня есть файл book.htm, в котором я храню присланные сообщения. Изначально он заканчивается вот чем:

""


""
И алгоритм добавления записей и сделал таким:
........
open (BOOK, "+seek (BOOK, -14, 2);
$date =localtime;
$username = $co->param(\'username\');
$username =~s/$text = $co->param(\'comments\');
print BOOK
$co->h3("Новая запись от:", $username, "Дата", $date, $co->p, $text),
$co->hr,
$co->end_html;
close BOOk;
..........
Т.е. на 14 байтов от конца файла добавлются новые данные.
И получается, что последнее сообщение добавляется в конец файла.
А как сделать, чтобы  добавлялось новое сообщение перед предыдущими не знаю........
Подскажите, пожалуйста


Оффлайн Wowik

  • The Warlock
  • Пользователь
  • **
  • Сообщений: 88
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
проблема при записи в файл......
« Ответ #1 : 25 Октября 2001, 12:15:30 »
Интересно ты пишешь :)

Держи, думаю разберешься
#!/usr/bin/perl

use strict; # Директива для ужесточения стилистического контроля
use CGI; # подключаем модуль CGI
my $gb_path="gb.dat"; #Файл, где будут храниться записи

my $query=new CGI; # создаем объект CGI

#Если запрос нулевой то выводим список сообщений
if(!$query->param){
    #Заголовок
    print $query->header,$query->start_html(\'Записи в гостевой книге\');

    #Открываем файл
    open(GB_DAT,"$gb_path")|| die("Невозможно открыть файл - $gb_path");
    my @lst=; # Помещаем строки в массив
    #Выводим данные
    for(my $i=@lst-1;$i>=0;$i-=3){ # пробегаемся по всем строкам
        # выводим имя автора как ссылку на его e-mail
        print "
Автор: $lst[$i-2]
";
        # выводим сообщение
        print "Сообщение:
$lst[$i]
";
    }
    #Закрываем файл
    close(GB_DAT);

    #Вывод формы записи сообщения
    print <


Ваше имя:

E-mail:

Сообщение:




HTML
    print $query->end_html; # конец html-документа

}else{
    #Обработка данных из формы

    #Открываем файл для дописи
    open(GB_DAT,">>$gb_path")|| die("Невозможно открыть файл - $gb_path");
    # Блокируем файл для записи другими пользователями
    flock(GB_DAT,2)|| die("Невозможно заблокировать файл - $gb_path");
    #записываем данные
    print GB_DAT $query->param(\'aname\'),"\\n";# Имя записавшего
    print GB_DAT $query->param(\'email\'),"\\n"; # E-mail
    my $message=$query->param(\'mess\'); # считываем сообщение
    $message=~tr/\\r\\n/ /; #Заменяем возвраты каретки на пробелы
    print GB_DAT "$message\\n"; # Записываем сообщение в файл
    #Закрываем файл
    close(GB_DAT);
    #Перенаправляем пользователя на список
    print $query->redirect(\'gb.cgi\');
}

(с) http://www.ru-board.com
А ларчик просто открывался ...

Оффлайн MIg

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 4
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
В этом примеревсе в gb.dat записывается.......
« Ответ #2 : 26 Октября 2001, 11:32:54 »
А можно ли сразу в book.htm писать?

Вопрос вот в чем
Я открываю файл на определенном байте и хочу, чтобы вновь добавляемая запись "вклинивалась" бы внутрь этого файла,

open (BOOK, "+seek (BOOK, -14, 2);
.
.
.
.close BOOk;

А то получается, что я пишу в него и после close BOOK файл закрывается и оставшийся кусок файла обрубается.....

Оффлайн Wowik

  • The Warlock
  • Пользователь
  • **
  • Сообщений: 88
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
проблема при записи в файл......
« Ответ #3 : 26 Октября 2001, 12:29:07 »
Файл это тебе не текстовый редактор :)
При записи в середину файла все даннные переписываются а не добавляются

Лучше всего сделай так

записывай записи в отдельный файл

open(F,"gb.dat");
@gblist=;
close(F);
open(F,">gb.dat");
print F $mess;
print F @gblist;
close(F);

Вместо print F $mess; помещаешь свое сообщение
а потом открываешь снова этот файл, форматируешь его и записываешь в html формате...
А ларчик просто открывался ...

Оффлайн MIg

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 4
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
проблема при записи в файл......
« Ответ #4 : 26 Октября 2001, 13:54:29 »
Придется так.......
Жалко, что не как в текстовом редакторе........

Спасибо за помощь!

 

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