Forum Webscript.Ru
Программирование => Perl => Тема начата: alex007 от 04 Декабря 2002, 23:54:54
-
Вот у меня есть файл в котором строки выглядят так:
юзверь|пароль|мыло
юзверь2|пароль2|мыло2
юзверь3|пароль3|мыло3
юзверь4|пароль4|мыло4
Каким макаром возможно на перле выбрать из этого списка юзверь3 и отредактировать его пароль или мыло.
Жду ответов.
С Уважением,
Алекс
-
Точно таким же, как и на любом другом языке: читать построчно, писать в новый файл, дойдя до нужной строки, подредактировать ее, продолжить. Потом новый файл переименовать в старый. Поскольку файлы с паролями обычно небольшие, можно весь файл загнать в массив.
-
КшЫуфксрук
Читаем построчно дело выглядит так:
open(File, "test.dat") || die;
while ($line = )
{
print $line;
}
close(InFile);
А как дальше...
-
#!/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);
-
glebushka
Спасибо
-
glebushka
Не работает твой скрипт, вернее то что надо на делает, а делает следующее:
юзверь|пароль|мыло
юзверь2|пароль2|мыло2
юзверь3|пароль3|мыло3
юзверь4|пароль4|мыло4
тоесть после каждой строчки, добавляет пустую строку.
-
упс. ну немного ошибся;-))
@temp=split(/|/, $line);
а надо так:
@temp=split(/\\|/, $line);
Самолично проверил - работает;-))))
Но дело даже не в этом, судя по твоему выводу ты строчку
chomp @line;
забыл добавить, а зря:-))))
-
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);
Как дописать твой пример/скрипт что бы он удалел правильную строчку и не оставлял ее пустой?
Жду ответов.
С Уважением,
Алекс.
-
Вместо
if($temp[0] eq юзверь3){
$temp[0]="";
$temp[1]="";
$temp[2]="";
$line="";
}
напиши (в варианте №2)
if($temp[0] eq юзверь3) {next}
скрипт пропустит эту строку и не станет перезаписывать её в файл.
-
Mog.
Спасибо.