Perl. Вывод содержимого файлов в Mysql

pikasun

Постоялец
Регистрация
23 Сен 2009
Сообщения
123
Реакции
9
Пытаюсь решить следующую задачу:
Имеется группа файлов с одинаковой структурой. (Все по 7 строк)
Необходим массовое открытие файлов в дирректории и считывание содержимого в mysql. Сам вывод в mysql собственно и не проблема.
Необходимо подружить 2 куска кода, чтобы получить в цикле вывод 7 строк со всех файлов куда нибудь.
Консоль например, как в примере.
Вот то, что работает:
Код:
#!/usr/bin/perl
opendir(DIR, "/tmp/2"); # открыть каталог
@files = sort(readdir(DIR)); # массив файлов
closedir(DIR);# закрыть каталог
foreach $list(@files) {
print("$list") unless -d; # выводит список файлов
}
Код:
open(FH,"</file1.txt");
while (defined(@str=<FH>)) {
print ("$str[0]");
print ("$str[1]");
print ("$str[2]");
print ("$str[3]");
print ("$str[4]");
print ("$str[5]");
print ("$str[6]");
}
close (FH);
 
Попробуй так

Код:
#!/usr/bin/perl

my $dir = "/tmp/2/"; #Лучше указать полный путь 
my @result;
opendir(DIR, $dir);
foreach (readdir(DIR)) {
        my $file = $dir . $_;
        print "[$file]\n";
        if (-r $file && $_ ne '.' && $_ ne '..') {
            @result = (@result, rfile($file));
        }
}

close(DIR);



sub rfile{ my ($file) = @_;
   my @tmp;
   open(FILE, $file) or die("Cant open $file");
   while(<FILE>) {
       chomp;
       push(@tmp, $_);
   }
   close(FILE);
   return @tmp;
} #rfile()

@result - массив со строками всех файлов
 
Попробуй так
Код:
#!/usr/bin/perl
my $dir = "/tmp/2/"; #Лучше указать полный путь 
my @result;
opendir(DIR, $dir);
foreach (readdir(DIR)) {
        my $file = $dir . $_;
        print "[$file]\n";
        if (-r $file && $_ ne '.' && $_ ne '..') {
            @result = (@result, rfile($file));
        }
}
close(DIR);
sub rfile{ my ($file) = @_;
   my @tmp;
   open(FILE, $file) or die("Cant open $file");
   while(<FILE>) {
       chomp;
       push(@tmp, $_);
   }
   close(FILE);
   return @tmp;
} #rfile()
@result - массив со строками всех файлов
Да, так оно красивее... С полными путями запарился. Вот еще до одного решения додумались.
Код:
#!/usr/bin/perl
opendir(DIR, '/tmp/1/'); # открыть каталог
@files = sort(readdir(DIR)); # массив файлов
closedir(DIR);# закрыть каталог
foreach $list(@files) {
next if -d $list;
my $path = '/tmp/1//'.$list;
open(FH,"<$path");
my @a;
my $i=0;
while (<FH>) {
$a[$i] = $_;
$i++;     
}
print "$a[0]\n";
print "$a[1]\n";
print "$a[2]\n";
print "$a[3]\n";
print "$a[4]\n";
print "$a[5]\n";
print "$a[6]\n";
close (FH);
}
 
Твой вариант просто выведет на экран содиржимое файлов. Если это достаточно, проще в консоле восользоваться коммандой
Код:
cat *
 
Твой вариант просто выведет на экран содиржимое файлов. Если это достаточно, проще в консоле восользоваться коммандой
Код:
cat *

Я не стал в примере уже писать вывод в мускул. Это уже легко реализуется.
Но за один проход вливается именно 7 значений, в примере - на консоль, или куда душе угодно.
Командой cat так не сделать.
 
Назад
Сверху