информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
За кого нас держат?Сетевые кракеры и правда о деле ЛевинаГде водятся OGRы
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Если ты знаешь какfя строка примерно, просто сделай: 24.10.04 13:32  Число просмотров: 1573
Автор: choor Статус: Elderman
<"чистая" ссылка>
Если ты знаешь какfя строка примерно, просто сделай:
open(FILE,"test.txt");
@rf=<FILE>;
close(FILE);
@rf[$nomer_stroki]=$kakoeto_znachenie;
потом запиши это в тот же файл...
Но это вариант если файл не очень большой, в другом случае используй while, добавив какойнить икс для счётчика
<programming>
[Perl] запись текста в указанную строку текстового файла 24.10.04 12:54  
Автор: n0xi0uzz <Черкасов Виктор> Статус: Member
Отредактировано 24.10.04 12:55  Количество правок: 1
<"чистая" ссылка>
как сделать такую вещь: сначала стереть указанную строчку файла, а потом записать туда другой текст?
или надо считывать файл в массив, стирать все в файле, изменять массив и писать в чистый уже файл?
Re 24.10.04 13:42  
Автор: Heller <Heller> Статус: Elderman
<"чистая" ссылка>
> как сделать такую вещь: сначала стереть указанную строчку
> файла, а потом записать туда другой текст?
> или надо считывать файл в массив, стирать все в файле,
> изменять массив и писать в чистый уже файл?
Первый вариант - делать как массив. В случае, если файл небольшой - это достаточно эффективно. Однако в большинстве случаев такое не пройдёт.

Другой вариант - использовать конструкцию:
open (FH, "+<filename");
При этом файл откроется и на чтение и на запись. Можно будет писать данные в конкретную позицию файла, затирая то что там было. Но есть одно НО: данные именно затираются, а не вставляются - то есть как будто бы Ты пишешь в текстовом редакторе, отключив режим INS. И тогда могут возникнуть проблемы - если строка, которую надо заменить окажется меньшей по длинне чем то, на что нужно заменить, файл придётся переписывать заново, начиная с той позиции где кончается строка.
Если ты знаешь какfя строка примерно, просто сделай: 24.10.04 13:32  
Автор: choor Статус: Elderman
<"чистая" ссылка>
Если ты знаешь какfя строка примерно, просто сделай:
open(FILE,"test.txt");
@rf=<FILE>;
close(FILE);
@rf[$nomer_stroki]=$kakoeto_znachenie;
потом запиши это в тот же файл...
Но это вариант если файл не очень большой, в другом случае используй while, добавив какойнить икс для счётчика
так я именно это и пытаюсь у вас узнать, как записать это в... 24.10.04 13:55  
Автор: n0xi0uzz <Черкасов Виктор> Статус: Member
<"чистая" ссылка>
> Если ты знаешь какfя строка примерно, просто сделай:
> open(FILE,"test.txt");
> @rf=<FILE>;
> close(FILE);
> @rf[$nomer_stroki]=$kakoeto_znachenie;
> потом запиши это в тот же файл...

так я именно это и пытаюсь у вас узнать, как записать это в тот же файл, если указана строка...
open (FILE,"filename"); 24.10.04 15:02  
Автор: Heller <Heller> Статус: Elderman
<"чистая" ссылка>
> > Если ты знаешь какfя строка примерно, просто сделай:
> > open(FILE,"test.txt");
> > @rf=<FILE>;
> > close(FILE);
> > @rf[$nomer_stroki]=$kakoeto_znachenie;
> > потом запиши это в тот же файл...
>
> так я именно это и пытаюсь у вас узнать, как записать это в
> тот же файл, если указана строка...

open (FILE,"filename");
@FILE=<FILE>;
close FILE;
$FILE[$num]=$str;
open (FILE,">filename");
print FILE join "", @FILE;
close FILE;

Здесь $num - номер строки, которую нужно заменить, $str - строка, на которую нужно заменить.
Странно... А почему у меня вот такая вещь тогда не получается: 25.10.04 09:57  
Автор: n0xi0uzz <Черкасов Виктор> Статус: Member
<"чистая" ссылка>
Хм.. странно... а почему у меня такая вещь неполучается:
вот форма редактирования сообщения в гесте:

   open GB, "$file";
   @am = <GB>;
   chomp(@am);
   close GB;

   $lm = @am;
   $Mted = $lm - $adm_msg-1; #переменную $adm_msg я принимаю через CGI
   $emsg = $am[$Mted];
   print qq~
   <table align=center width=70%>
   <tr><th>Редактирование сообщения</th></tr>
   <tr><td><center>
   Внимание! Удаление конструкций ";;;;;" может привести к ошибке!<br>
   <form action=gb.pl method=post>
   <textarea name=Emsg rows=10 cols=50>$emsg</textarea><br>
   <input name=action value=edit type=hidden>
   <input name=Mted value=$Mted type=hidden>
   <input type=submit value=Изменить>
   </form></td></tr></table>
   ~;
   if ($action eq "edit")
   {
    &edit_msg;
   }

---

А вот код подрограммы, производящей непосредственно замену исправленной строки файла:
sub edit_msg {
 $Emsg=$q->param("Emsg");
 $Mted=$q->param("Mted");
 if ($Emsg ne "")
 {
  open GB, "$file";
  @af = <GB>;
  close GB;
  $af[$Mted] = $Emsg;
  open GB, ">$file";
  print GB "@af";
  close GB;
 }
}

---
Поясню на всякий случай. В форму редактирования сообщения берется строка из файла на редактирование и в поле textarea у меня она появляется. То есть ошибка где-то в подпрограмме или "по пути" к ней. Подскажите, пожалуйста, в чем проблема.
Возмоные ошибки 25.10.04 22:38  
Автор: Heller <Heller> Статус: Elderman
<"чистая" ссылка>
Глубоко не вникал, но вот что бросилось в глаза:

1. Не советовал бы использовать в таком контексте псевдокавычки qq. Хотя про их пользу говорят на каждом углу, я не раз сталкивался с совершенно неожиданными фокусами этих кавычек. А когда строка рвётся на несколько строк - вообще жуть. Лучше используй конструкцию <<МЕТКА:

print <<МЕТКА;
встроенный
документ
(интерполяция включена)

МЕТКА

2. Как я понял, $lm должна содержать количнство строк. Но, вообще-то присвоение $lm=@am заносит в переменную последнее значение массива, а не количетво его элементов. Размер массива лежит в переменной (вернее, в специальной синтаксической конструкцией, которая работает как переменная) $#am - попробуй, возможно, поможет.
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach