Конвертировать дату из файла в Perl - PullRequest
0 голосов
/ 02 марта 2020

В моей программе мне нужно открыть свой текстовый файл. Далее мне нужно найти дату и конвертировать. Я не знаю, как конвертировать дату с моим кодом. Теперь в результате у меня мм / дд / гггг. Я хотел бы изменить его на дд-мм-гггг. Возможно ли это сделать с помощью моего кода. Как мне это исправить?

#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;   
    }     
}
#my file.txt
Today is 03.02.2020. Tommorow will be 03.03.2020. 

Ответы [ 3 ]

0 голосов
/ 02 марта 2020

Чтобы получить результаты захваченного совпадения, вам нужно написать круглые скобки вокруг частей, которые вы хотите сохранить:

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

Кроме того, ваш файл file.txt разделяет компоненты точками, а не косыми чертами, поэтому вам нужно либо изменить файл, либо регулярное выражение.

0 голосов
/ 03 марта 2020

Если цель изменить формат даты в файле, то это может быть достигнуто с помощью одной строки

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 script", UNIX системы предполагают, что скрипт будет включен в 'perl script'.

\b можно опустить, если не существует строгих требований к date , разделенных пунктуацией.

Внимание:

Пожалуйста, сделайте копию оригинального файла на случай, если вы допустите ошибку.

0 голосов
/ 02 марта 2020

Цель: заменить в файле все даты, представленные в форме 'dd.mm.yyyy', на 'dd-mm-yyyy'

Ошибки: В операциях Регулярное выражение кода настроено на формат даты «дд / мм / гггг», что не соответствует данным во входном файле «дд.мм.гггг»

Процедура: открыть файл, читать файл построчно, подставлять дату в формате 'dd.mm.yyyy' в формат 'dd-mm-yyyy' в каждой строке во всех случаях, выводить результат на консоль, закрывать файл, готово

Примечание: OP выводит дату по одному ди git в каждой строке на консоль - определенно не то, что он намеревался [исправить], чтобы сделать замену во входном файле, код должен быть изменен или см. один вкладыш предоставляется.

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 file.txt
Today is 03-02-2020. Tommorow will be 03-03-2020.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...