Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Aldekein
Зарегистрирован: 08.03.2003 Сообщения: 2 Откуда: Net
|
Добавлено: Сб Мар 08 2003 20:06 Заголовок сообщения: PERL: Удаление строки из файла |
|
|
Есть поиск по файлу базы данных пользователей. При администрировании, для того чтобы удалить пользователя нужно удалить строку из файла.
Как это сделать??
Вырезка того места:
if ($param eq "delete") { print "Administration panel\n"; print "Administration panel\n"; print "User adminUser's $param2 profile deleted...\n"; ### deleting the profile file @mas_login=split //,$param2; $subdir=@mas_login[0]; unlink ("$memberdatadir/$subdir/$param2") || print "Error unlinking file $memberdatadir/$subdir/$param2\n\n"; ### clearing the search databaze entry open DEL,">$memberdatadir/members.dat" || print "Error opening file $memberdatadir/members.dat\n\n"; foreach(){ chomp; ($login,$city,$state,$country,$age,$gender)=split /\\divider/; if ($login eq $param2) { # И вот здесь-то надо как-то эту строчку удалить. Желательно именно удалить, а не сделать пустой. Возможные вариации скрипта кидайте сюда, плиз. } } |
|
Вернуться к началу |
|
|
FFF Гость
|
Добавлено: Вт Мар 11 2003 13:42 Заголовок сообщения: Re: PERL: Удаление строки из файла |
|
|
> И вот здесь-то надо как-то эту строчку удалить. если строку не записать в выходной файл, то ее и не будет в нем (в выходном файле) ):
если совсем не хочется терять строку, то можно ввести признак того, что строка удалена. Например, перед именем пользователя ставить * (звездочку). Тогда в тех местах скрипта, где проверяется имя пользователя, возможно, потребуются небольшие изменения. |
|
Вернуться к началу |
|
|
Aldekein
Зарегистрирован: 08.03.2003 Сообщения: 2 Откуда: Net
|
Добавлено: Вт Мар 11 2003 18:08 Заголовок сообщения: Re: PERL: Удаление строки из файла |
|
|
Это бы меня тоже устроило, конечно. Но как??? Как редактировать текущую строку не переписывая полностью весь файл. |
|
Вернуться к началу |
|
|
FFF Гость
|
Добавлено: Ср Мар 12 2003 09:51 Заголовок сообщения: Re: PERL: Удаление строки из файла |
|
|
понял. я считал, что речь идет о копировании файла с попутным удалением записей. Если речь идет о редактировании на месте, то, возможно, Вам поможет функция
seek FILEHANDLE, OFFSET, WHENCE
например,
------------------------------------- ------ use FileHandle;
$F_NAME= "users.txt";
sysopen HANDLE, $F_NAME, O_RDWR, 0700 or die "sysopen $F_NAME: $!";
HANDLE->seek(150, 0); HANDLE->print("150_150 XXXXX"); HANDLE->close(); -------------------------------- -----------
Текущую позицию в открытом файле можно получить с помощью функции tell. после нахождения записи, подлежащей удалению, тек.позиция файла будет находиться в конце прочитанной записи. неообходимо вернуться в позицию перед началом записи, например,
HANDLE->seek($rec_len, 1);
и выполнить
HANDLE->print($new_record); |
|
Вернуться к началу |
|
|
|