2016-02-11 3 views
1

В моем файле file.csv есть некоторые столбцы, среди которых столбец 1 представляет дату и время, я пытаюсь сортировать его по дате и времени, но он сортируется только по времени. пожалуйста, проверьте и предложите.Perl Сортировка даты и времени внутри файла csv

#!/usr/bin/perl 

use strict; 
my $input_dir = "d://perl//output"; 
my $output_dir = "d://perl//output"; 
my $input_file = "$input_dir//file.csv"; 
my $output_file = "$output_dir//output2_file.csv"; 
open (OUTPUT, ">>$output_file") or die "Error 016: Error creating $out 
+put_file \n"; 
open (INPUT, "<$input_file") or die "Error 001: Error locating file $i 
+nput_file \n"; 

my @array =(<INPUT>); 

#print "Array\n"; 
#@print join("\n", @array)."\n\n"; 

print "Sort Date\n"; 
print join("\n", @sortedTime)."\n\n"; 

print OUTPUT; 
close (OUTPUT); 
    close (INPUT); 

данные в FILE.CSV выглядит

2016-02-02:00:44,mttsmshub1 
2016-02-05:00:39,mttsmshub1 
2016-02-03:00:32,tttsmshub1 
2016-02-04:00:24,mttsmshub1 

выходной ток выглядит

2016-02-04:00:24,mttsmshub1 
2016-02-03:00:32,tttsmshub1 
2016-02-05:00:39,mttsmshub1 
2016-02-02:00:44,mttsmshub1 

ожидается выход должен быть

2016-02-02:00:44,mttsmshub1 
2016-02-03:00:32,tttsmshub1 
2016-02-04:00:24,mttsmshub1 
2016-02-05:00:39,mttsmshub1 
+0

Где вы сортируете enything? – Jens

+0

Каков ваш ожидаемый результат? – serenesat

+0

Извините, я новичок в perl, а при выполнении выше скрипта вы увидите, что он будет сортироваться в зависимости от времени, поэтому «2016-02-04: 00: 24, mttsmshub1» станет первой строкой, так как она имеет наименьшее время 00:24, но все, что я хочу, это сортировать его вместе с датой. поэтому то, что нужно, это сортировать его дату и временную метку. –

ответ

1

Вы на самом деле не использовать sort оператора в вашем код. Во-вторых, линия print OUTPUT не имеет смысла ... Вы ничего не печатаете в дескрипторе файла OUTPUT.

Просто, просто вроде как только вы чавкать ваш INPUT дескриптор файла, а затем распечатать его на OUTPUT дескриптором

my @array = sort <INPUT>; 
print OUTPUT @array; 

Там не должно быть никакой необходимости использовать join вообще. Строки в вашем массиве уже имеют символы новой строки, которые уже были в файле INPUT.

Смежные вопросы