Perl 使用文件名中的变量打开文本文件
我试图用perl脚本打开一个文本文件。文件名的一部分包含YYYYMMDD格式的日期,该格式会更改。我在正确构建文件路径时遇到问题 完整文件名:Perl 使用文件名中的变量打开文本文件,perl,Perl,我试图用perl脚本打开一个文本文件。文件名的一部分包含YYYYMMDD格式的日期,该格式会更改。我在正确构建文件路径时遇到问题 完整文件名: abc_20160825_filename.txt use POSIX qw(strftime); $currdate = strftime "%Y%m%d\n", localtime; $filename = 'directory/', $currdate '_filename.txt'; open(FILE, $filename) or die
abc_20160825_filename.txt
use POSIX qw(strftime);
$currdate = strftime "%Y%m%d\n", localtime;
$filename = 'directory/', $currdate '_filename.txt';
open(FILE, $filename) or die "Cant find file";
代码:
abc_20160825_filename.txt
use POSIX qw(strftime);
$currdate = strftime "%Y%m%d\n", localtime;
$filename = 'directory/', $currdate '_filename.txt';
open(FILE, $filename) or die "Cant find file";
我正在使用PHP,但我认为它类似于Perl
$currdate = strftime "%Y%m%d\n", localtime;
$filename = "directory/$currdate_filename.txt";
您所做的错误只是构建字符串的语法
构建字符串的另一种方法如下所示:
$currdate = strftime "%Y%m%d\n", localtime;
$filename = "directory/" . $currdate . "_filename.txt";
请检查Perl是否像PHP一样使用
,或者像JavaScript一样使用+
来链接单独的文本元素。有几件事,您的strftime调用中有\n
,它附加了一行新行。你不会想要这个的。您没有在此处正确连接字符串:
$filename = 'directory/', $currdate '_filename.txt';
它是
而不是,
,变量和\u filename.txt
之间没有一个。下面的例子包括use strict;使用警告代码>并执行您想要的操作:
use strict;
use warnings;
use POSIX qw(strftime);
my $currdate = strftime( "%Y%m%d", localtime );
my $filename = 'directory/' . $currdate . '_filename.txt';
print $filename;
编辑,并使用3参数,让它告诉您失败的原因:
open(FILE,'<', $filename) or die "Cant find file $!\n";
open(FILE,你说你想创建一个名为abc_20160825_filename.txt
,但是你的Perl代码(甚至不会编译)看起来像是在试图创建目录/20160825_filename.txt
。请问是哪一个
我建议您将该模块与sprintf
一起使用。这个示例程序生成这两种变体,我希望很容易看到如何修改它
使用严格;
使用“全部”警告;
使用特征“说”;
使用时间::片段“localtime”;
{
我的$filename=sprintf
“abc_u%s_filename.txt”,
localtime->strftime(“%Y%m%d”);
说$filename;
}
{
我的$filename=sprintf
'目录/%s_filename.txt',
localtime->strftime(“%Y%m%d”);
说$filename;
}
输出
abc_20160825_filename.txt
目录/20160825_filename.txt
确切的问题是什么?我定义了一个导致日期字符串的变量(例如20160825)。然后,我尝试将其替换为文件名,以替换包含20160825日期文本的文本文件,然后用perl脚本打开该文件。是的,我理解。但我不明白您的问题是什么您说您想创建一个名为abc_20160825_filename.txt
,但您的perl代码(甚至无法编译)看起来它正在尝试创建目录/20160825\u filename.txt
。请问是哪一个?您在$currdate
后面附加了一个新行,它将用作文件名的一部分。字符串的单引号,除非您正在进行插值。请测试您的解决方案。您正在向全世界发布应该发布的内容作为OP问题的解决方案,您甚至不测试您的建议!使用您的代码,perl将尝试插入不存在的变量$currdate\u filename
。它将生成警告消息在串联中使用未初始化值$currdate\u filename(.)或字符串
并设置$filename
topdirectory/.txt
。