我是一個perl新手,但已閱讀Schwartz,foy和Phoenix的「Learning Perl」,並且對語言理解力差。即使在使用本書和網絡之後,我仍然在掙扎。Perl:用列表中的值替換文本字符串(文本文件或標量上下文)
我的目標是能夠做到以下幾點:
搜索特定的文件夾(當前文件夾)和文件名搶完整路徑。用完整路徑和當前文件夾名稱保存文件名。
打開一個模板文件並在特定位置(例如使用替換)以及當前文件夾名稱(在同一文本文件中的另一個位置,我還沒有到此)插入具有完整路徑的文件名。
將新修改的文件保存到特定位置(當前文件夾)中的新文件。
我有很多的文件/我要處理並計劃在perl程序複製到每個文件夾,這樣的perl程序可以使新的文件夾。
到目前爲止,我已經得到了...:
use strict;
use warnings;
use Cwd;
use File::Spec;
use File::Basename;
my $current_dir = getcwd;
open SECONTROL_TEMPLATE, '<secontrol_template.txt' or die "Can't open SECONTROL_TEMPLATE: $!\n";
my @secontrol_template = <SECONTROL_TEMPLATE>;
close SECONTROL_TEMPLATE;
opendir(DIR, $current_dir) or die $!;
my @seq_files = grep {
/gz/
} readdir (DIR);
open FASTQFILENAMES, '> fastqfilenames.txt' or die "Can't open fastqfilenames.txt: $!\n";
my @fastqfiles;
foreach (@seq_files) {
$_ = File::Spec->catfile($current_dir, $_);
push(@fastqfiles,$_);
}
print FASTQFILENAMES @fastqfiles;
open (my ($fastqfilenames), "<", "fastqfilenames.txt") or die "Can't open fastqfilenames.txt: $!\n";
my @secontrol;
foreach (@secontrol_template) {
$_ =~ s/@/$fastqfilenames/eg;
push(@secontrol,$_);
}
open SECONTROL, '> secontrol.txt' or die "Can't open SECONTROL: $!\n";
print SECONTROL @secontrol;
close SECONTROL;
close FASTQFILENAMES;
我的問題是,我無法弄清楚如何使用自己的文件列表,以取代「@」在我的模板文本文件:
my @secontrol;
foreach (@secontrol_template) {
$_ =~ s/@/$fastqfilenames/eg;
push(@secontrol,$_);
}
替換函數不會用$ fastqfilenames中列出的文件列表替換「@」。我用GLOB(0x8ab1dc)替換了「@」。
我這樣做是錯誤的嗎?我不應該使用替代品,因爲這不能完成,而是將文件列表($ fastqfilenames)插入到template.txt文件中?我可以使用文件內容(例如s/A/{r file.txt ...)來替代$ fastqfilenames。有什麼建議麼?
乾杯,
JamesT
編輯:
這使得它要好。
foreach (@secontrol_template) {
s/@/$fastqfilenames/g;
push @secontrol, $_;
}
作爲這兩個建議,$ fastqfiles是一個文件句柄。
替換爲:
open(my($ fastqfilenames),「<」,「fastqfilenames.txt」)或死「無法打開fastqfilenames.txt:$!\ n」;
與此:
my $fastqfilenames = join "\n", @fastqfiles;
使這一切良好。謝謝你們。
我是新手,因此我的程序設計很差。這與我使用「我瞭解如何使用」或我所知道的有關。 '@ fastqfiles'中的文件名列表可以用來替換模板文件中的符號@,但我不知道如何去除(除了Unix sed/awk中的一些基本知識,因此是替代嘗試)。我不知道如何循環並將'@ fastqfiles'的內容保存到我的模板文件(存儲在@ secontrol_template'中)。我想我可以理解在替換中使用'@ fastqfiles'數組的標量/列表。也許,這是設計缺陷的一部分。 – JamesT 2013-03-25 13:06:25