Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

Slight change to Perl script converting csv file to text file. Change from minute, hour, 3 hour

Posted on 2011-09-09
2
Medium Priority
?
255 Views
Last Modified: 2012-05-12
I'm using this script

#!/usr/bin/perl

use strict;
use warnings FATAL => 'all';

my $file = shift;

open(F, $file);
my @count_3 = ();
my $working_date = '';
my $working_time = '';
my $working_hour = 0;
my @avgs = ();
use Data::Dumper;
use List::Util qw(sum);

sub convert_hour($$) {
	my $hour = shift;
	my $minutes = shift;
	return 60 * $hour + $minutes;
}

while (<F>) {
	next unless /\S/;
	chomp;
	my (@data) = split(/\,/);
	
	next unless $data[1] =~ m|(\d+/\d+/\d+) (\d+)\:(\d\d)|;
	my $current_date = $1;
	my $current_time = "$1 $2:$3";
	my $current_hour = convert_hour($2,$3);
	next if $data[2] < 0 || $data[2] == 999;
	if ($current_date ne $working_date) {
		$working_date = $current_date;
		$working_time = $current_time;
		$working_hour = $current_hour;
		@count_3 = ($data[2]);
		next;
	}
	if ($current_hour >= $working_hour + 180 && @count_3 >= 3) {
		push(
			@avgs,
			[$data[0], $working_time, sum(@count_3)/@count_3],
		);
		@count_3 = ();
		$working_time = $current_time;
		$working_hour = $current_hour;
	}
	push(@count_3, $data[2]);
}
print join(
	"\n", map(
		join(" ",@{$_}),
	 @avgs)
), "\n";

Open in new window


The difference is that I now have a file format that has hourly data instead of minute day. I want three hour averages beginning at hours 0, 1, & 2 . The only two differences is that the file format gives me hourly instead of minute data (see new attached file) AND I want the data points divided by 1000 (the file gives me parts per billion but I want parts per million.) See my original post and attached file.

http://www.experts-exchange.com/Programming/Languages/Scripting/Perl/Q_27289723.html
vc2.csv
0
Comment
Question by:libertyforall2
2 Comments
 
LVL 9

Accepted Solution

by:
parparov earned 2000 total points
ID: 36517082
If you want to divide by 1000, just add, at the end of line 43, after last @count_3 but before right bracket
 / 1000 

Open in new window

.
Your previous data file had also hourly data - all the lines were tagged by :00 time.
0
 

Author Closing Comment

by:libertyforall2
ID: 36520312
Thanks.
0

Featured Post

Hire Technology Freelancers with Gigs

Work with freelancers specializing in everything from database administration to programming, who have proven themselves as experts in their field. Hire the best, collaborate easily, pay securely, and get projects done right.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Although it can be difficult to imagine, someday your child will have a career of his or her own. He or she will likely start a family, buy a home and start having their own children. So, while being a kid is still extremely important, it’s also …
Computer science students often experience many of the same frustrations when going through their engineering courses. This article presents seven tips I found useful when completing a bachelors and masters degree in computing which I believe may he…
Viewers will learn how to properly install Eclipse with the necessary JDK, and will take a look at an introductory Java program. Download Eclipse installation zip file: Extract files from zip file: Download and install JDK 8: Open Eclipse and …
Progress

885 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question