in reply to Re^2: perl file formatting
in thread perl file formatting

Are your input data columns really separated by a space? In the sample above it looks like it may be tabs, in which case your regexp won't match. Maybe try:

split(/\s+/, $_);

Hope this helps!


The way forward always starts with a minimal test.

Replies are listed 'Best First'.
Re^4: perl file formatting
by perlforsgs (Initiate) on Jan 13, 2017 at 13:22 UTC

    The separator is comma ,yes missed that in my snippet and I also need the date to be dynamically retrieved based on the current date of processing ,rather than hardcoded date

      tybalt89 showed you how to get the current date in the YYYYMMDD format you need.

      use strict; use warnings; my $enddate = todate(); while(<DATA>) { last if ($. > 1 and $enddate < (split /,/)[1]); print $_; } sub todate { my ($year, $month, $day) = (localtime)[5,4,3]; return sprintf "%04d%02d%02d",$year + 1900, $month + 1, $day; } __DATA__ F12,F11,F481,F55,F989 8204B,20161002,1045.469,test,Y 8204,20170112,1064.848,test,Y 8204A,20170113,1064.505,test,Y 8204B,20170114,1045.469,test,Y

      $. is a built-in variable that counts lines of input. The split function implicitly operates on the current input line, producing a list (or maybe an array), and we take a slice of that to look at the only field we care about, the date in the second column.

      H:\perl>perl 1178418.pl F12,F11,F481,F55,F989 8204B,20161002,1045.469,test,Y 8204,20170112,1064.848,test,Y 8204A,20170113,1064.505,test,Y

      Updated: reduced if () {last if()} to just last if().

      But God demonstrates His own love toward us, in that while we were yet sinners, Christ died for us. Romans 5:8 (NASB)

Re^4: perl file formatting
by perlforsgs (Initiate) on Jan 13, 2017 at 13:18 UTC
    Actually each fields are separated by comma