Я столкнулся с проблемой и потратил немало часов на ее понимание ...
Я хочу прочитать файл .csv, используя perl, найти дату (и цифры), упорядочить дату в другом формате и добавить числа к существующему номеру.
Данные в .csv представляют собой простые поля с ";" delimeter.
Дата существует в формате 01.01.2000 в файле .csv, и я хотел бы отформатировать ist в 2000-01-01. Сумма существует в форме "-200".
Теперь чтение и помещение его в переменные работает нормально. Однако переменные не ведут себя так же, как другие, я не могу правильно использовать регулярные выражения для них, и если я пытаюсь добавить сумму в другую переменную, я получаю следующую ошибку: Аргумент "\ x {0} - \ x {0} 5 \ x { 0}, \ x {0} 6 \ x {0} 6 \ x {0} "кроме нумерации c (+)
Теперь мне кажется, что есть проблема с кодирование данных, которое я не обработал правильно, но после нескольких попыток «endode, decode, upgrade downgrade et c» я просто не могу заставить его работать. И если я сохраню эти переменные в текстовом файле и открою их вручную, это скажет мне, что файл закодирован в utf8 и предназначен только для чтения.
Что мне здесь не хватает и что мне нужно понять относительно кодировку, я много об этом читал, но до сих пор не понял в моем случае.
Редактировать: Извините за мой предыдущий недостаточный код. Следующий код должен работать сам по себе:
#!/usr/bin/perl -w
use strict;
use warnings;
use utf8;
use Text::CSV;
use Data::Dumper qw(Dumper);
my $file = "test.csv";
my $s_delimiter = ";";
open(my $fh, '<', $file) or die("ERROR open $file ($!)\n");
my $csv = Text::CSV->new({binary => 1, sep_char => $s_delimiter});
# read File
while( my $row = $csv->getline( $fh ) )
{
my @array = @{$row};
my $arraylength = @array;
my $date = $array[2];
my $amount = $array[6];
$amount += 200;
print "$amount\n";
$date =~ /(\d\d).(\d\d).(\d\d\d\d)/;
print "$date\n";
print "$3 $2 $1\n";
}
close $fh;
Спасибо за вашу помощь заранее!