Отправляет email-рассылки с помощью сервиса Sendsay

работа с CSV

Всем привет!

У меня возникла такая задача:

Есть файл sells.csv с записями вроде:
first;second
apple;gold
russian;english
...
По размеру не очень большой - пара килобайт.

Нужно в Perl'e сделать вот что:

просмотреть файл по строкам
если "$a;$b" есть в этом файле, то сделать то-то и удалить из файла
строчку, которая совпала с этим выражением
Если "$a;$b" вообще нет в этом файле, то сделать то-то

Я принцип действий понимаю, но что-то у меня не выходит...

Вроде нужно сделать так:
sells.csv построчно добавить в массив
затем просматривая этот массив искать "$a;$b"
если найдено то удалить из массива эту строку и снова все записать в
файл а потом сделать "что-то"
Если нет, то продолжать искать
Если вообще нет, то сделать "что-то"

а вот с кодом проблем.
Помогите, кому не лень. :)

Спасибо.

Ответить   Ilya Sat, 6 May 2006 21:55:17 +0400 (#546063)

 

Ответы:

А что конкретно не выходит?

-----Original MessageFrom: Ilya [mailto:il***@r*****.com]
Sent: Saturday, May 06, 2006 9:55 PM
To: inet.webbuild.webbuilding (5090336)

Всем привет!

У меня возникла такая задача:

Есть файл sells.csv с записями вроде:
first;second
apple;gold
russian;english
....
По размеру не очень большой - пара килобайт.

Нужно в Perl'e сделать вот что:

просмотреть файл по строкам
если "$a;$b" есть в этом файле, то сделать то-то и удалить из файла строчку,
которая совпала с этим выражением Если "$a;$b" вообще нет в этом файле, то
сделать то-то

Я принцип действий понимаю, но что-то у меня не выходит...

Вроде нужно сделать так:
sells.csv построчно добавить в массив
затем просматривая этот массив искать "$a;$b"
если найдено то удалить из массива эту строку и снова все записать в файл а
потом сделать "что-то"
Если нет, то продолжать искать
Если вообще нет, то сделать "что-то"

а вот с кодом проблем.
Помогите, кому не лень. :)

Спасибо.

--
Илья



библиотекa сайтостроительства http://www.i2r.ru/static/244/

http://subscribe.ru/ http://subscribe.ru/feedback



библиотекa сайтостроительства http://www.i2r.ru/static/244/

Ответить   Sun, 7 May 2006 12:52:43 +0400 (#546942)

 

Здравствуйте, Sledge.

Вообще ничего не выходит :( Постоянно выполняется &error_sells; даже
если $line eq $tmp. Я думал, что проблема может быть в том, что строки
$tmp и $line могут различасться из-за наличия в какой-нибудь знака
конца строки. Здесь я его убираю $line =~ s/\n//g;, если он есть, но
программа всё равно ведет себя так, словно совпадающие строки не
найдены...

open(CHECKFILE, "sells.csv");
while (<CHECKFILE>)
{
push(@sells, $_);
}
close(CHECKFILE);

$tmp=qq[$FORM{'pin'};$FORM{'pwd'}];
$tmp =~ s/\n//g;

foreach $line (@sells)
{
$line =~ s/\n//g;
if ($line ne $tmp)
{
next;
}
elsif ($line eq $tmp)
{
&step2;
exit;
}
else
{
&error_sells;
exit;
}
}

Вы писали 7 мая 2006 г., 12:52:43:

Ответить   Ilya Wed, 10 May 2006 21:21:46 +0400 (#547074)

 

Вот так выглядит sells.csv
BEGIN first;second
apple;gold
russian;english
russian2;english2
russian3;english3
END Сам файл обработки выглядит также, как у Вас (с некоторыми изменениями)

BEGIN use strict;

open(CHECKFILE, "sells.csv");
my @sells=<CHECKFILE>;
close(CHECKFILE);

my %FORM=('pin'=>'russian','pwd'=>'english');
my $tmp=qq[$FORM{'pin'};$FORM{'pwd'}];

foreach my $line (@sells)
{
chomp $line;
if ($line ne $tmp)
{
print "$line NOT_EQUAL $tmp\n";
next;
}
elsif ($line eq $tmp)
{
print "$line EQUAL $tmp\n";
exit;
}
else
{
print 'Error';
exit;
}
}
END Такой вариант работает?

-----Original MessageFrom: Ilya [mailto:il***@r*****.com]
Sent: Wednesday, May 10, 2006 9:22 PM
To: inet.webbuild.webbuilding (5090336)

Здравствуйте, Sledge.

Вообще ничего не выходит :( Постоянно выполняется &error_sells; даже если
$line eq $tmp. Я думал, что проблема может быть в том, что строки $tmp и
$line могут различасться из-за наличия в какой-нибудь знака конца строки.
Здесь я его убираю $line =~ s/\n//g;, если он есть, но программа всё равно
ведет себя так, словно совпадающие строки не найдены...

open(CHECKFILE, "sells.csv");
while (<CHECKFILE>)
{
push(@sells, $_);
}
close(CHECKFILE);

$tmp=qq[$FORM{'pin'};$FORM{'pwd'}];
$tmp =~ s/\n//g;

foreach $line (@sells)
{
$line =~ s/\n//g;
if ($line ne $tmp)
{
next;
}
elsif ($line eq $tmp)
{
&step2;
exit;
}
else
{
&error_sells;
exit;
}
}

Вы писали 7 мая 2006 г., 12:52:43:

Ответить   Wed, 10 May 2006 19:24:04 +0400 (#547165)