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

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

Оффлайн GoDleSS

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 6
  • +0/-0
  • 0
    • Просмотр профиля
    • http://madhamsters.com
Как говорится, люди добрые помогите тупому недопрограммисту =)
В общем проблема такая:
Имеется файл, откуда считываются данные в массив(что-то вроде @filesource=;) и куда вписываются новые строки(через цикл все строки массива, в который записали старые данные+новая строка). Так вот как бы сделать так, чтобы был вывод последних скажем 50 эллементов массива(т.е. еще и убрать ненужные вначале), а не первых, как это получается в таком примерно виде:
Считываем:

open(DATAFILE, "datafile1");
@filesource=;
close(DATAFILE);

Записываем:

open (DATAFILE, ">datafile1");
print DATAFILE "\\n";
for ($i = 1; $i < 50; $i++) {
print DATAFILE "$filesource[$i]";
}
print DATAFILE $new;
close DATAFILE;

Кто не понял, это кусочек простенького чата...
It\'s a nice day to die my friend!

Оффлайн mike

  • ProPerl\'er
  • Старожил
  • ****
  • Сообщений: 435
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Проблема с записью/считыванием из файла...
« Ответ #1 : 20 Февраля 2003, 11:33:37 »
Для последних элементов используй отрицательные индексы:

foreach $i (reverse 1..50)
{
    print DATAFILE $filesource[-$i]
}

или

foreach $i (-50..-1)
{
    print DATAFILE $filesource[$i]
}


:)
« Последнее редактирование: 20 Февраля 2003, 11:42:36 от mike »
[ основной браузер когда-то был, теперь попробуй разберись =]

Оффлайн Wyclef

  • hello_worlder
  • Старожил
  • ****
  • Сообщений: 307
  • +0/-0
  • 2
    • Просмотр профиля
    • http://thug.narod.ru
Проблема с записью/считыванием из файла...
« Ответ #2 : 20 Февраля 2003, 12:34:58 »
Цитировать
Считываем:


@filesource = reverse ;
It\'s nice to be important, but it\'s more important to be nice!

Оффлайн GoDleSS

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 6
  • +0/-0
  • 0
    • Просмотр профиля
    • http://madhamsters.com
Проблема с записью/считыванием из файла...
« Ответ #3 : 21 Февраля 2003, 11:55:23 »
Опробовал ваши предложения - 0 результата, давайте я выложу весь исходник(только пожалуйста без распространения), я уже неделю просто над этой пробемой бьюсь, а все никак :(
В общем надо чтобы сообщения в чате нормально добавлялись, но чтоб при этом новая мессага не перетерала последний элемент массива, как это получается у меня...
[CODE]
#!/usr/bin/perl
#################################
#Scripted by CheRt[aka_GoDleSS] #
#©2003            #
#################################
$filepath=\'/inetpub/wwwroot/cgi-bin/mch/\';
$filext=\'mes.html\';
$clearfile=\'clear.pl\';
#--------------localtime
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
$time1=$hour;
$time2=$min;
$time3=$sec;
if ($time1<10) {
$time1="0$time1";
}
if ($time2<10) {
$time2="0$time2";
}
if ($time3<10) {
$time3="0$time3";
}
#-----------------------
print "Content-type: text/html\\nPragma: no-cache\\n\\n";
print "";
print "\\n";
&getform;
if (&getoldfile) {
   &printform;
   &wfile;
   }
else
{
   print "Скрипт работает нестабильно, сообщи администрации
\\n";
}
print "\\n";
exit(0);
sub getform {
   $buffer = "";
   read(STDIN, $buffer, $ENV{\'CONTENT_LENGTH\'});
   @pairs=split(/&/,$buffer);
   foreach $pair (@pairs)
   {
      @a = split(/=/,$pair);
      $name=$a[0];
      $value=$a[1];
      $value =~ s/\\+/ /g;
      $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
      $value =~ s/~!/ ~!/g;
      $value =~ s/\\      $value =~ s/\\>/\\>\\;/g;
      $value =~ s/[\\r\\n]//g;
      push (@data,$name);
      push (@data,$value);
   }
   %form=@data;
   %form;
}
sub getoldfile {
   $form{\'room\'} =~ s/\\W//g;
   return 0 unless open(DATAFILE, "$filepath$form{\'room\'}$filext");
   @filesource=;
   close(DATAFILE);
   return 1;
}
sub printform {
   if ($form{\'logoff\'} eq \'1\') {
      print << "EOF";


EOF
   } else {
      print << "EOF";
      










Сообщение:



















"Очистить
"Смайлики"




EOF
   }
}
sub wfile {
   $color = "$form{\'color\'}";
   $newmessage = "\\ \\;($time1:$time2:$time3)$form{\'uname\'}: $form{\'mes\'}
\\n";
   open (DATAFILE, ">$filepath$form{\'room\'}$filext");
   print DATAFILE "\\n";
   for ($i = 1; $i < 50; $i++) {
      print DATAFILE $filesource[$i];
   }
   print DATAFILE $newmessage;
      close DATAFILE;
}
It\'s a nice day to die my friend!

Оффлайн Chs

  • Perl программер
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1108
  • +0/-0
  • 2
    • Просмотр профиля
    • http://chs.now.at/
Проблема с записью/считыванием из файла...
« Ответ #4 : 21 Февраля 2003, 12:56:11 »
Цитировать
давайте я выложу весь исходник(только пожалуйста без распространения)

Лол.:)))) Готовый коммерческий продукт.:))))))
Только стиль пограммирования в стиле Matt\'s scripts archive.:)))
Цитировать
Опробовал ваши предложения - 0 результата


#!/usr/bin/perl

@a = (\'1\',\'2\',\'3\');


foreach $i (reverse(1..2))
{ print $a[-$i];
}


---------- Perl Run ----------
23
Output completed (0 sec consumed) - Normal Termination
Как видишь - по способу mike результат есть.:)
2B OR NOT 2B = FF

Оффлайн GoDleSS

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 6
  • +0/-0
  • 0
    • Просмотр профиля
    • http://madhamsters.com
Проблема с записью/считыванием из файла...
« Ответ #5 : 22 Февраля 2003, 00:37:16 »
Готовый комерческий говоришь?! Да, я брал готовый простейший чат когда-то давно, когда начал изучать Перл, но если посмотришь, то в нем уже и трети нет от того, что было в начале, т.е. постепенно я его почти полностью изменил под себя, но так как учился на нем, то и стиль этот приобрел... Так что не строй из себя крутого программера, все знающего, не заметно, а раз я сказал: не работает, значит не работает у меня - пробовал...
It\'s a nice day to die my friend!

Оффлайн GoDleSS

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 6
  • +0/-0
  • 0
    • Просмотр профиля
    • http://madhamsters.com
Проблема с записью/считыванием из файла...
« Ответ #6 : 22 Февраля 2003, 01:12:01 »
Набираем:
#!/usr/bin/perl

@a = (\'1\',\'2\',\'3\');


foreach $i (reverse(1..2))
{ print $a[-$i];
}
print header;
print @a;

Получаем:

23123
По-моему , не то что нужно ....
It\'s a nice day to die my friend!

Оффлайн Mog.

  • Фанат форума
  • Ветеран
  • *****
  • Сообщений: 828
  • +0/-0
  • 0
    • Просмотр профиля
Проблема с записью/считыванием из файла...
« Ответ #7 : 22 Февраля 2003, 08:41:26 »
А ты попробуй сообщения в файл не дописывать, а ципать их сначала в массив, потом добавляй в начало массива новое сообщение и переписывай весь файл. Мессаги будут храниться в файле (и в считанном оттуда массиве) в нужном тебе порядке. Ты их скока захочешь - столько покажешь. Если не хранить в этом файле очень много сообщений, то могет получиться.
Все болезни от нервов, только сифилис от удовольствия

Оффлайн YA

  • Модератор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 597
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Проблема с записью/считыванием из файла...
« Ответ #8 : 22 Февраля 2003, 08:56:42 »
GoDleSS, если ты не можешь пять строчек скопировать, здесь тебе не помогут. Посмотри, что тебе написал Chs и что написал ты. Все работает правильно.
Литературный перевод с русского и английского на Perl. Дорого!

Оффлайн GoDleSS

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 6
  • +0/-0
  • 0
    • Просмотр профиля
    • http://madhamsters.com
Проблема с записью/считыванием из файла...
« Ответ #9 : 22 Февраля 2003, 12:30:10 »
Цитировать
А ты попробуй сообщения в файл не дописывать, а ципать их сначала в массив, потом добавляй в начало массива новое сообщение и переписывай весь файл. Мессаги будут храниться в файле (и в считанном оттуда массиве) в нужном тебе порядке. Ты их скока захочешь - столько покажешь. Если не хранить в этом файле очень много сообщений, то могет получиться.

Дело в том, что я так уже пробовал - все работает, но при этом новые сообщения чата будут появляться наверху, а н снизу, что мне не надо, а вот если сделать так, но чтоб снизу, то только с бесконечным массивом у меня работает все правильно(представь сколько чат будет грузиться через полчаса разговора!), а с заданым глючит.
It\'s a nice day to die my friend!

Оффлайн GoDleSS

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 6
  • +0/-0
  • 0
    • Просмотр профиля
    • http://madhamsters.com
Проблема с записью/считыванием из файла...
« Ответ #10 : 22 Февраля 2003, 12:35:32 »
Цитировать
GoDleSS, если ты не можешь пять строчек скопировать, здесь тебе не помогут. Посмотри, что тебе написал Chs и что написал ты. Все работает правильно.

Поверь мне, что 5 строчек я скопировать могу(да и сам написать значительно больше 5 строк), кому сильно интересно могу даже немного недописанного бота для довольной известной игры БК(http://www.combats.ru) подкинуть...
А тем не менее у меня глючит с вашими предложениями чат, хотя отдельно само предложение работает нормально, ладно, спасибо всем - пойду копаться, может и получиться.
It\'s a nice day to die my friend!

Оффлайн Mog.

  • Фанат форума
  • Ветеран
  • *****
  • Сообщений: 828
  • +0/-0
  • 0
    • Просмотр профиля
Проблема с записью/считыванием из файла...
« Ответ #11 : 22 Февраля 2003, 16:30:39 »
Цитировать
но при этом новые сообщения чата будут появляться наверху

Перед показом бери из массива 50 (например) штук первых в другой массив, делай ему реверс и вперед. Покажутся снизу.
Все болезни от нервов, только сифилис от удовольствия

Оффлайн mike

  • ProPerl\'er
  • Старожил
  • ****
  • Сообщений: 435
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Проблема с записью/считыванием из файла...
« Ответ #12 : 24 Февраля 2003, 12:57:58 »
GoDleSS
Цитировать
чтобы был вывод последних скажем 50 эллементов массива

Цитировать
@a = (\'1\',\'2\',\'3\');


foreach $i (reverse(1..2))
{ print $a[-$i];
}
print header;
print @a;
По-моему , не то что нужно ....

Само собой, если ты выводишь несколько  последних элементов, а потом зачем-то приписываешь к ним остальной массив. Сравни с тем, как ты описал проблему.

Цитировать
А тем не менее у меня глючит с вашими предложениями чат, хотя отдельно само предложение работает нормально

[OFF]Предложение - это не готовая к использованию часть скрипта, а просто подсказка, как можно решить твою проблему. Твои скрипты за тебя писать никто не будет.[/OFF]
[ основной браузер когда-то был, теперь попробуй разберись =]

 

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