Forum Webscript.Ru

Программирование => Perl => Тема начата: alex007 от 04 Декабря 2002, 23:54:54

Название: Строки в файле
Отправлено: alex007 от 04 Декабря 2002, 23:54:54
Вот у меня есть файл в котором строки выглядят так:

юзверь|пароль|мыло
юзверь2|пароль2|мыло2
юзверь3|пароль3|мыло3
юзверь4|пароль4|мыло4

Каким макаром возможно на перле выбрать из этого списка юзверь3 и отредактировать его пароль или мыло.

Жду ответов.

С Уважением,
Алекс
Название: Строки в файле
Отправлено: КшЫуфксрук от 05 Декабря 2002, 00:03:18
Точно таким же, как и на любом другом языке: читать построчно, писать в новый файл, дойдя до нужной строки, подредактировать ее, продолжить. Потом новый файл переименовать в старый. Поскольку файлы с паролями обычно небольшие, можно весь файл загнать в массив.
Название: Строки в файле
Отправлено: alex007 от 05 Декабря 2002, 00:18:12
КшЫуфксрук
Читаем построчно дело выглядит так:
open(File, "test.dat") || die;
   while ($line = )
       {
           print $line;        
       }
   close(InFile);

А как дальше...
Название: Строки в файле
Отправлено: glebushka от 05 Декабря 2002, 00:59:47
#!/usr/bin/perl -w
use strict;
open InFile, "< test.dat";
my @line=;
close(InFile);
chomp @line;
my ($line, @temp);
open InFile, "> test.dat";
foreach $line (@line){
@temp=split(/|/, $line);
if($temp[0] eq "юзверь3"){
$temp[0]="юзверь3+";
$temp[1]="пароль3+";
$temp[2]="мыло3";
$line="$temp[0]|$temp[1]|$temp[2]";
}
print InFile $line, "\\n";
}
close(InFile);
Название: Строки в файле
Отправлено: alex007 от 05 Декабря 2002, 01:15:06
glebushka
Спасибо
Название: Строки в файле
Отправлено: alex007 от 08 Декабря 2002, 19:49:26
glebushka
Не работает твой скрипт, вернее то что надо на делает, а делает следующее:

юзверь|пароль|мыло

юзверь2|пароль2|мыло2

юзверь3|пароль3|мыло3

юзверь4|пароль4|мыло4

тоесть после каждой строчки, добавляет пустую строку.
Название: Строки в файле
Отправлено: glebushka от 09 Декабря 2002, 01:52:50
упс. ну немного ошибся;-))
Цитировать
@temp=split(/|/, $line);

а надо так:
@temp=split(/\\|/, $line);
Самолично проверил - работает;-))))
Но дело даже не в этом, судя по твоему выводу ты строчку
chomp @line;
забыл добавить, а зря:-))))
Название: Строки в файле
Отправлено: alex007 от 07 Января 2003, 02:01:06
glebushka
Спасибо тебе за помощь, немог ли ты подсказать как удалить мне строку выберая юзверь3 вот привожу два примера твоего же скрипта:

1) Удаляет все подрят, но оставляет первую строчку
open (FILE, "<$pass")|| die "Couldn\'t open file: $pass: $! \\n";
my @line=;
close(FILE);
chomp @line;
my ($line, @temp);
open (FILE, ">$pass")|| die "Couldn\'t open file: $pass: $! \\n";
foreach $line (@line){
@temp=split(/\\|/, $line);
if($temp[0] eq юзверь3){
$temp[0]="";
$temp[1]="";
$temp[2]="";
$line="";
}
print FILE $line;
}
close(FILE);

2) Удаляет правильную строчку, но оставляет её пустой.
open (FILE, "<$pass")|| die "Couldn\'t open file: $pass: $! \\n";
my @line=;
close(FILE);
chomp @line;
my ($line, @temp);
open (FILE, ">$pass")|| die "Couldn\'t open file: $pass: $! \\n";
foreach $line (@line){
@temp=split(/\\|/, $line);
if($temp[0] eq юзверь3){
$temp[0]="";
$temp[1]="";
$temp[2]="";
$line="";
}
print FILE $line, "\\n";
}
close(FILE);

Как дописать твой пример/скрипт что бы он удалел правильную строчку и не оставлял ее пустой?

Жду ответов.

С Уважением,
Алекс.
Название: Строки в файле
Отправлено: Mog. от 07 Января 2003, 07:54:21
Вместо
if($temp[0] eq юзверь3){
$temp[0]="";
$temp[1]="";
$temp[2]="";
$line="";
}

напиши (в варианте №2)

if($temp[0] eq юзверь3) {next}

скрипт пропустит эту строку и не станет перезаписывать её в файл.
Название: Строки в файле
Отправлено: alex007 от 07 Января 2003, 23:16:08
Mog.
Спасибо.