Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Perl中从文件转换日期_Perl - Fatal编程技术网

在Perl中从文件转换日期

在Perl中从文件转换日期,perl,Perl,在我的程序中,我需要打开我的文本文件。接下来,我需要找到日期并转换。我不知道如何用我的代码转换日期。现在结果是mm/dd/yyyy。我想把它改成dd mm yyyy。可以用我的代码来做吗。我该怎么修 #my program use strict; use warnings; use feature 'say'; open my $file, 'file.txt' or die "Error\n"; my $re = qr/\d{1,2}\/\d{1,2}\/\d{1,4}/i; #mm/dd

在我的程序中,我需要打开我的文本文件。接下来,我需要找到日期并转换。我不知道如何用我的代码转换日期。现在结果是mm/dd/yyyy。我想把它改成dd mm yyyy。可以用我的代码来做吗。我该怎么修

#my program
use strict;
use warnings;
use feature 'say';

open my $file, 'file.txt' or die "Error\n";
my $re = qr/\d{1,2}\/\d{1,2}\/\d{1,4}/i;  #mm/dd/yyyy
#my $re = qr/\d{1,2}-\d{1,3}/i; #postcode     
while(my $fh = <$file>) {
    if (my @match = $fh =~ /$re/g){;
        say for @match;   
    }     
}
目标: 将“dd.mm.yyyy”格式中表示的所有日期替换为“dd.mm.yyyy”

错误: 在OP的代码中,正则表达式被调整为日期格式“dd/mm/yyyy”,与输入文件“dd.mm.yyyy”中的数据不匹配

程序: 打开文件,逐行读取文件,将每行中的“dd.mm.yyyy”格式的日期替换为“dd-mm-yyyy”格式所有事件,将结果输出到控制台,关闭文件,完成

注意: OP在每一行向控制台输出一位数字的日期——绝对不是他想要的[更正],以使输入文件中的代码被修改或看到提供的一行

use strict;
use warnings;
use feature 'say';

# Uncomment bellow to read from file
# my $filename = 'file.txt';

# open my $file, '<', $filename
        # or die "Error\n";

# NOTE:
#   In provided file you have dates in following format
#       03.02.2020
#   but in question you refer to
#       03/02/2020
#   The code adjusted accordingly, substitution applies 
#   only to dates matching re format in line (no need for 'if')

while(<DATA>) {             # replace DATA with $file to read from a file
    chomp;                  # snip eol
    s/(\d{1,2})\.(\d{1,2})\.(\d{1,4})/$1-$2-$3/g;       # substitute all date 0ccurrences in line
    say;   
}

__DATA__
#my file.txt
Today is 03.02.2020. Tommorow will be 03.03.2020. 

要获得捕获的匹配结果,需要在要保留的零件周围写上括号:

my $re = qr/(\d{1,2})\/(\d{1,2})\/(\d{1,4})/i;  #mm/dd/yy

此外,示例file.txt使用点而不是斜线分隔组件,因此您需要更改文件或正则表达式。

如果您的目标是更改文件中的日期格式,则可以通过以下一行代码实现

perl -0777 -pe "s/\b(\d{2})\.(\d{2})\.(\d{2,4})\b/$1-$2-$3/g" -i file.txt
选项:

  • -0777立即读取文件
  • -pe在“…”中执行脚本并打印结果
  • -我在适当位置进行替换(将原始文件修改为所需结果)
注:

MS Windows假定脚本被包装成
“perl脚本”
,UNIX系统假定脚本被包装成
“perl脚本”

\b
如果对日期没有严格要求,则可以省略

注意:


请复制原始文件,以防出错。

没有解释的代码片段对提出问题的人或阅读本文的任何人都没有帮助。请停止。@PolarBear需要解释的不是代码,而是您建议的意图和理由。人们从复制粘贴代码片段中学不到任何东西,而代码片段只有机会成为他们所需要的,没有任何上下文帮助他们做出决定。@PolarBear换句话说:问题和答案应该是英语的,网站不能希望提供所有可能相关语言的信息,最好还是用英语提供,而不是一点也不提供(我知道这不是你的母语)。必须解释代码的目的和与特定读者(OP或许多其他稍后将阅读它的人)的相关性,以给出代码应该如何使用的上下文。代码本身无法做到这一点。我对这个链接的观点是,英语并不能解决每个人的问题,但它是可以预期的,而且比不提供任何上下文要好末尾的
i
没有任何作用——数字没有大小写。文件中的日期格式为dd,但正则表达式查找的日期格式为dd/dd/d[ddd](年份通常由2或4位数字表示)。注释不用于扩展讨论;这段对话已经结束。
my $re = qr/(\d{1,2})\/(\d{1,2})\/(\d{1,4})/i;  #mm/dd/yy
perl -0777 -pe "s/\b(\d{2})\.(\d{2})\.(\d{2,4})\b/$1-$2-$3/g" -i file.txt