Perl: добавление входного имени файла к выходному имени файла - PullRequest
0 голосов
/ 18 мая 2009

Я написал скрипт, который читает каждый файл в каталоге, что-то делает и выводит результаты из каждого входного файла в два разных файла, например, "outfile1.txt" и "outfile2.txt". Я хочу иметь возможность связать мои полученные файлы с оригинальными, так как я могу добавить входное имя файла (infile.txt) к полученным именам файлов, чтобы получить что-то вроде этого:

infile1_outfile1.txt, infile1_outfile2.txt

infile2_outfile1.txt, infile2_outfile2.txt

infile3_outfile1.txt, infile3_outfile2.txt ...?

Спасибо за любую помощь!

Ответы [ 4 ]

6 голосов
/ 18 мая 2009

Используйте подстановку, чтобы удалить ".txt" из входного имени файла. Используйте конкатенацию строк для создания имен выходных файлов:

my $infile = 'infile1.txt';

my $prefix = $infile;
$prefix =~ s/\.txt//;  # remove the '.txt', notice the '\' before the dot

# concatenate the prefix and the output filenames
my $outfile1 = $prefix."_outfile1.txt";
my $outfile2 = $prefix."_outfile2.txt";
4 голосов
/ 18 мая 2009
use File::Basename;
$base = basename("infile.txt", ".txt");
print $base."_outfile1.txt";
0 голосов
/ 18 мая 2009

Если я вас правильно понимаю, вы ищете что-то подобное?

use strict;
use warnings;

my $file_pattern = "whatever.you.look.for";
my $file_extension = "\.txt";

opendir( DIR, '/my/directory/' ) or die( "Couldn't open dir" );
while( my $name_in = readdir( DIR )) {
    next unless( $name_in =~ /$file_pattern/ );

    my ( $name_base ) = ( $name_in =~ /(^.*?)$file_pattern/ );
    my $name_out1 = $name_base . "outfile1.txt";
    my $name_out2 = $name_base . "outfile2.txt";
    open( IN,   "<", $name_in )   or die( "Couldn't open $name_in for reading" );
    open( OUT1, ">", $name_out1 ) or die( "Couldn't open $name_out1 for writing" );
    open( OUT2, ">", $name_out2 ) or die( "Couldn't open $name_out2 for writing" );

    while( <IN> ) {
        # do whatever needs to be done
    }

    close( IN );
    close( OUT2 );
    close( OUT1 );
}
closedir( DIR );

Редактировать: расширение расширения реализовано, дескриптор входного файла закрыт и протестирован.

0 голосов
/ 18 мая 2009

простая конкатенация строк должна работать здесь, или посмотрите на cpan для соответствующего модуля

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...