Как я могу выбрать записи из файла CSV на основе меток времени в Perl? - PullRequest
0 голосов
/ 21 января 2010

У меня есть файл CSV с меткой времени в первом столбце, как показано ниже:

Time,head1,head2,...head3
00:00:00,24,22,...,n
00:00:01,34,55,...,n
and so on...

Я хочу отфильтровать данные с определенным временным диапазоном, например, с 11:00:00 до 16:00:00, с заголовком и поместить в массив. Я написал код ниже, чтобы получить заголовок в массиве.

#!/usr/bin/perl -w
use strict;

my $start = $ARGV[0];
my $end = $ARGV[1];

my $line;
$line =<STDIN>;
my $header = [ split /[,\n]/, $line ];

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

Ответы [ 3 ]

2 голосов
/ 21 января 2010

Я вроде обманул. Подходящая программа, вероятно, будет использовать DateTime, а затем сравнивать с функцией сравнения DateTime. Если вы ожидаете ввода только в этом формате, мой "чит" должен работать.

#!/usr/bin/perl
use strict;
use warnings;

use Text::CSV;
use DateTime;

my $start = 110000;
my $end   = 160000;

my $csv = Text::CSV->new () or die "Cannot use CSV: ".Text::CSV->error_diag ();

my @lines;
open my $fh, "<:encoding(utf8)", "file.csv" or die "Error opening file: $!";
while ( my $row = $csv->getline( $fh ) ) {
    my $time = $row->[0];
    $time =~ s/\://g;
    if ($time >= $start and $time <= $end) {
        push @lines, $row;
    }
}
$csv->eof or $csv->error_diag();
close $fh;

#do something here with @lines
1 голос
/ 21 января 2010
#!/usr/bin/perl -w
use strict;

my $start = '11:00:00';
my $end = '16:00:00';

my @data;
chomp ($_ = <STDIN>);    # remove trailing newline character
push @data, [split /,/]; # add header

while(<>) {
    chomp;
    my @line = split /,/; 
    next if $line[0] lt $start or $line[0] gt $end;
    push @data, [@line]; # $data[i][j] contains j-th element of i-th line.
}
1 голос
/ 21 января 2010

только начало

my $start="01:00:01";
my $end = "11:00:01";
while(<>){
    chomp;
    if ( /$start/../$end/ ){
        @s = split /,/ ;
        # do what you want with @s here.
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...