Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
|
Если ты знаешь какfя строка примерно, просто сделай: 24.10.04 13:32 Число просмотров: 1616
Автор: 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 - попробуй, возможно, поможет.
|
|
|