Perl 需要从ftp目录下载最新的.txt文件并保存

Perl 需要从ftp目录下载最新的.txt文件并保存,perl,Perl,基本上,我需要下载一个txt文件,每天更新和更改名称,并在Excel中打开它。我的问题是,我为MAC电脑做这件事,但我找不到VBA所需的模块(据我所知) 因此,我已经求助于编写一个PERL脚本来实际下载该文件,然后我将制作一个VBA脚本来打开最新的文件。我已经成功地使用net:ftp模块下载了文件,按日期搜索并只下载最新文件的最佳方式是什么?另外,fetch是更好的选择吗?ftp站点不需要凭据 #!/usr/bin/perl use Net::FTP; use strict; use warni

基本上,我需要下载一个txt文件,每天更新和更改名称,并在Excel中打开它。我的问题是,我为MAC电脑做这件事,但我找不到VBA所需的模块(据我所知)

因此,我已经求助于编写一个PERL脚本来实际下载该文件,然后我将制作一个VBA脚本来打开最新的文件。我已经成功地使用net:ftp模块下载了文件,按日期搜索并只下载最新文件的最佳方式是什么?另外,fetch是更好的选择吗?ftp站点不需要凭据

#!/usr/bin/perl
use Net::FTP;
use strict;
use warnings;

my $ftp = Net::FTP->new("ftp.site", Debug => 0)
 or die;

$ftp->login("anonymous",'-anonymous')
 or die, $ftp->message;

$ftp->cwd("/public/doc/cor/")
 or die;

$ftp->get("20130614c.txt")
 or die , $ftp->message;

$ftp->quit;

由于您的文件名是基于日期的,您只需执行以下操作:

$ftp->get( [sort($ftp->ls)]->[-1] )

因为这将是您的最新文件…

因为您的文件名是基于日期的,所以您可以执行以下操作:

$ftp->get( [sort($ftp->ls)]->[-1] )

因为这将是您的最新文件…

如果您可以始终根据当前日期检查名称,则只需创建今天日期的格式化字符串:

my($sec, $min, $hour, $mday, $mon, $year) = localtime(time);
$year += 1900;
$mon += 1;

my $today = sprintf("%04d%02d%02d", $year, $mon, $mday);
现在,根据您的约定,您有了文件名:

$ftp->get("${today}c.txt")
如果需要当前日期以外的日期,则可以使用日期数学库来计算所需的日期并相应地设置其格式。我个人总是使用
Date::Calc


当然,如果文件在ftp主机上还不存在,请确保优雅地处理错误。

如果您可以始终根据当前日期检查名称,则只需创建一个今天日期的格式化字符串:

my($sec, $min, $hour, $mday, $mon, $year) = localtime(time);
$year += 1900;
$mon += 1;

my $today = sprintf("%04d%02d%02d", $year, $mon, $mday);
现在,根据您的约定,您有了文件名:

$ftp->get("${today}c.txt")
如果需要当前日期以外的日期,则可以使用日期数学库来计算所需的日期并相应地设置其格式。我个人总是使用
Date::Calc


当然,如果文件在ftp主机上还不存在,请确保优雅地处理错误。

ftp通常不发送文件时间戳;文件的名称方案是什么?它是基于日期的。今天的是20130617c.txt,每天都在增加。c只是代表某些数据类型,不应更改。FTP通常不发送文件时间戳;文件的名称方案是什么?它是基于日期的。今天的是20130617c.txt,每天都在增加。c只是代表某些数据类型,不应该更改。将$ftp->get与我的上一个替换为确切的文件名会导致脚本在该行消失。知道为什么吗?输入
表示排序($ftp->ls)在该行之前,查看文件名的顺序是否正确…将$ftp->get与我的上一个文件交换为确切的文件名导致脚本在该行死亡。知道为什么吗?输入
表示排序($ftp->ls)在那一行之前,看看文件名的顺序是否正确…我喜欢这样,但是会有很多情况下,文件还没有被添加,我不得不为周末添加一些子句,等等(它只在工作日发布)。如果我找不到一个更基本的解决方案,比如让马萨去工作,我肯定会走这条路。我喜欢这样,但会有很多情况下,文件还没有添加,我不得不添加一些周末条款,等等(它只在工作日发布)。如果我找不到更基本的解决办法,比如让马萨去工作,我肯定会走这条路。