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

Тема в разделе "Другие языки", создана пользователем pikasun, 5 окт 2010.

Модераторы: Цукер
  1. pikasun

    pikasun Постоялец

    Регистр.:
    23 сен 2009
    Сообщения:
    117
    Симпатии:
    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);
    
     
  2. bondaf

    bondaf Постоялец

    Регистр.:
    16 мар 2010
    Сообщения:
    85
    Симпатии:
    20
    Попробуй так

    Код:
    #!/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 - массив со строками всех файлов
     
    pikasun нравится это.
  3. pikasun

    pikasun Постоялец

    Регистр.:
    23 сен 2009
    Сообщения:
    117
    Симпатии:
    9
    Да, так оно красивее... С полными путями запарился. Вот еще до одного решения додумались.
    Код:
    #!/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);
    }
    
     
  4. bondaf

    bondaf Постоялец

    Регистр.:
    16 мар 2010
    Сообщения:
    85
    Симпатии:
    20
    Твой вариант просто выведет на экран содиржимое файлов. Если это достаточно, проще в консоле восользоваться коммандой
    Код:
    cat *
     
  5. pikasun

    pikasun Постоялец

    Регистр.:
    23 сен 2009
    Сообщения:
    117
    Симпатии:
    9
    Я не стал в примере уже писать вывод в мускул. Это уже легко реализуется.
    Но за один проход вливается именно 7 значений, в примере - на консоль, или куда душе угодно.
    Командой cat так не сделать.
     
  6. nagual

    nagual Постоялец

    Регистр.:
    17 фев 2009
    Сообщения:
    65
    Симпатии:
    3