Xpoint
   [напомнить пароль]

Снова скрипт для первоклассника

Метки: [без меток]
[удл]
2008-02-04 02:46:46 [обр] Andrej[досье]

Есть user.txt файл, его содержимое:

1117479114,1117429104,1217479104,1187479104,1177479104

Через запятую указаны файлы которые нужно открыть (к каждому названию файла нужно дописать .txt)

Эти файлы c таким содержимым:

Название|Имя|Почта|Время|имя|xx|0|ип|текст||||
Название|Имя|Почта|Время|имя|xx|0|ип|текст||||
Название|Имя|Почта|Время|имя|xx|0|ип|текст||||
Название|Имя|Почта|Время|имя|xx|0|ип|текст||||

С каждого такого файла нужно взять первую строчку и вывести с нее навазние, почту и текст.
Пытаюсь открыть эти файлы так:

my %hash = ();
foreach my $fname (qw($fimena_failov)) {
  open (IMEN,"<","Messages/${fname}.txt") or die "Can't open file $!\n";
       flock(IMEN,LOCK_SH); # на открытие

          ***
     
  close(IMEN) or die "Can't close file $!\n";
}

Загвоздка в том что я не знаю как с каждого открытого файла взять только 1 первую строчку.

Помогите пожалуйста. Также может это можно сделать как-то более эстетично, профессиональней что ли чем у меня. Спасибо.

спустя 8 минут [обр] Алексей Севрюков(198/1280)[досье]
Andrej[досье] *:
my $firstline=<IMEN>;
спустя 1 минуту [обр] Алексей Севрюков(198/1280)[досье]
P.S. Изучайте БД. Хватить страдать ерундой.
спустя 40 минут [обр] Andrej[досье]
my %hash = ();
foreach my $fname (qw($fimena_failov)) {
  open (IMEN,"<","Messages/${fname}.txt") or die "Can't open file $!\n";
       flock(IMEN,LOCK_SH); # на открытие

my $firstline=<IMEN>;
     
  close(IMEN) or die "Can't close file $!\n";
}

print $firstline;
Вы предлагаете сделать так?
У меня не выводит.
спустя 1 час 9 минут [обр] Роман Чемисов(56/327)[досье]

Andrej[досье]

не выводит

от того, что Вы обращаетесь к $firstline вне блока foreach (в котором она определена).

Изучайте Perl! Прошло уже больше двух лет, а Вы всё задаёте детские вопросы.

спустя 39 минут [обр] Andrej[досье]
my %hash = ();
foreach my $fname (qw($fimena_failov)) {
  open (IMEN,"<","Messages/${fname}.txt") or die "Can't open file $!\n";
       flock(IMEN,LOCK_SH); # на открытие

my $firstline=<IMEN>;
     
  close(IMEN) or die "Can't close file $!\n";

$firstline=split(/\|/,$_);
print $firstline[1];
}
Подскажите, почему такая конструкция не работает?
спустя 32 минуты [обр] Dennis F. Latypoff aka funky_dennis(24/78)[досье]
-$firstline=split(/\|/,$_);
+my @firstline = split (/\|/, $firstline);
спустя 8 часов [обр] Andrej[досье]
Спасибо большое. Еще вопрос, как понять какая строчка из какого файла взята?
То есть помимо почты и тексте, еще нужно вывести название файла. Подскажите пожалуйста как это сделать.
спустя 9 минут [обр] Алексей Севрюков(198/1280)[досье]
my %hash = ();
foreach my $fname (qw($fimena_failov)) {
  open (IMEN,"<","Messages/${fname}.txt") or die "Can't open file $!\n";
       flock(IMEN,LOCK_SH); # на открытие

my @firstline=split (/\|/,<IMEN>);
print "File: $fname. Второе поле первой строчки файла: $firstline[1]\n";
     
close(IMEN) or die "Can't close file $!\n";

}
спустя 1 минуту [обр] Алексей Севрюков(198/1280)[досье]
М Andrej[досье], у меня такое ощущение что Вы над нами стебесь... Простите если это не так.
спустя 19 минут [обр] Andrej[досье]
Спасибо большое.
Нет, просто. Черт, ну не получается у меня выучить. Что-то понимаю, что-то нет.
Да и если честно мне проще обратиться к вам чем проводить многие часы за книжками разбираясь. т.к. я не так уж и часто программирую.
спустя 22 часа [обр] Дворнов Роман(9/109)[досье]
Andrej[досье] Постоянно общаясь к другим за "помощью" вы ничего никогда не поймете и не выучите.
спустя 2 дня 4 часа [обр] Andrej[досье]

Так все работает:

foreach my $fname (qw(1187479104 1177479104 1177479104)) {

А почему так не работает?

my $fimena_failov = '1187479104 1177479104 1177479104';
foreach my $fname (qw($fimena_failov)) {
спустя 3 часа 33 минуты [обр] Евгений Седов aka KPbIC(38/176)[досье]
Может быть это поможет понять?
http://valera.asf.ru/perl/book/4/4.13.html
спустя 1 час 18 минут [обр] Алексей Севрюков(198/1280)[досье]

Andrej[досье] А почему должно работать? Почитайте perldoc perlop (секция Regexp Quote-Like Operators).
Чтобы сделать как хотите Вы, т.е. имена файлов перечислены в строке нужно сделать:

my $fimena_failov = '1187479104 1177479104 1177479104';
foreach my $fname (split(/\s+/ => $imena_failov)) {

что эквивалентно:

my $fimena_failov = '1187479104 1177479104 1177479104';
my @files=split(/\s+/ => $imena_failov);
foreach my $fname (@files) {
спустя 1 час 22 минуты [обр] Andrej[досье]
Я безнадежен. :)
Спасибо Вам.
Powered by POEM™ Engine Copyright © 2002-2005