NAME

    Text::FixedWidth::Parser - Used to parse the fixed width text file 

DESCRIPTION

    The Text::FixedWidth::Parser module allows you to read fixed width text file by specifying string mapper

SYNOPSIS

 use Text::FixedWidth::Parser;

 FileData
 ~~~~~~~~
 ADDRESS001XXXXX YYYYYYY84 SOUTH STREET USA
 MARK0018286989020140101         
 ADDRESS002YYYYYYY      69 BELL STREET  UK 
 MARK0028869893920140101         

 my $string_mapper = [
       {
           Rule => {
               LinePrefix => [1, 7],
               Expression => "LinePrefix eq 'ADDRESS'"
           },
           Id   => [8,  3],
           Name => [11, 13],
           Address => {DoorNo => [24, 2], Street => [26, 14]},
           Country => [40, 3]
       },
       {
           Rule => {
               LinePrefix => [1, 4],
               Expression => "LinePrefix eq 'MARK'"
           },
           Id                 => [5,  3],
           Mark1              => [8,  2],
           Mark2              => [10, 2],
           Mark3              => [12, 2],
           Mark4              => [14, 3],
           ResultDate         => [15, 8],
           ResultDatePattern  => '%Y%m%d',
           ResultDateTimezone => 'America/Chicago'
       }
 ];


 # StringMapper should be passed while creating object
 my $obj = Text::FixedWidth::Parser->new( 
               { 
                  #Required Params
                  StringMapper  => $string_mapper,
                  #optional Params
                  TimestampToEpochFields => ['ResultDate'],
                  DefaultDatePattern     => '%Y%m%d',
                  DefaultTimezone        => 'GMT',
                  ConcateString          => '', 
                  EmptyAsUndef           => 1
               }
           );

 open my $fh, '<', 'filename';

 $data = $obj->read($fh);

PARAMS

  • StringMapper

    * StringMapper can be HASHRef or multiple StringMappers as ARRAY of HASHRefs

    * If Multiple StringMappers exist, Based on Rule apropriate StringMapper will get selected

    * In Multiple StringMappers, Its better to place Rule-less mapper after Rule based mappers

    * Rule-less mapper will picked as soon as its get access in an array

    * StringMapper fields should be defined as ARRAY, First element as StartingPoint of string and Second element as length of the string

    * Rule, Expression are keywords, overriding or changing those will affect the functionality

  • TimestampToEpochFields

    * TimestampToEpochFields can have ARRAY of timestamp fields which need to be converted as epoch

    * TimestampToEpochFields can have Pattern of the timestamp in StringMapper as field name suffixed with Pattern keyword, Which will override "DefaultDatePattern" for that particular field

    Eg:- FieldName : DOB, DOBPattern => '%Y%m%d'
    

    * see STRPTIME PATTERN TOKENS section in DateTime::Format::Strptime for more patterns

    * TimestampToEpochFields can have timezone of the timestamp in StringMapper as field name suffixed with Timezone keyword, Which will override "DefaultTimezone" for that particular field

    Eg:- FieldName : DOB, DOBTimezone=> 'GMT'
    
  • DefaultDatePattern

    * DefaultDatePattern can have DatePattern which will be used to convert date to epoch by default

  • DefaultTimezone

    * DefaultTimezone can have timezone which will be used while converting date to epoch

  • ConcateString

    * StringMapper can be defined as {Address => [24, 2, 26, 14]}

    * This represents, Address field value will be concatenation of two strings, which are Startingpoint 24, Length 2 and Startingpoint 26, Length 14

    * While concatenating strings, value of ConcateString will be used

    Eg: ConcateString = '-';  The Value of Address = 84-SOUTH STREET    
    

    * Space(' ') is default ConcateString

  • EmptyAsUndef

    * If this flag is enabled, Empty values will be assigned as undef

    Eg: Name = '', it will be assigned as Name = undef
    

METHODS

  • get_string_mapper

    Desc : This method will return the StringMapper

    Params : NONE

    Returns: HASHRef as Mentioned in the config

  • set_string_mapper

    Desc : This method is used set the StringMapper

    Params : StringMapper

    Returns: NONE

  • get_concate_string

    Desc : This method will return the ConcateString

    Params : NONE

    Returns: ConcateString

  • set_concate_string

    Desc : This method is used to set ConcateString

    Params : String

    Returns: NONE

  • is_empty_undef

    Desc : This method will indicate is empty flag enabled or disabled

    Params : NONE

    Returns: 1 on enabled, 0 on disabled

  • set_empty_undef

    Desc : This method is used to enable or disable EmptyAsUndef flag

    Params : 1 to enable, 0 to disable

    Returns: NONE

  • set_timestamp_to_epoch_fields

    Desc : This method is used to set fields that need to be converted to epoch

    Params : [FieldName14,..]

    Returns: NONE

  • add_timestamp_to_epoch_fields

    Desc : This method is used to add fields with existing fields that need to be converted to epoch

    Params : [FieldName14,..]

    Returns: NONE

  • get_timestamp_to_epoch_fields

    Desc : This method is used to get fields that will be converted to epoch

    Params : [FieldName14,..]

    Returns: NONE

  • set_default_date_pattern

    Desc : This method is used to set date format which will be used to convert the date to epoch. '%Y%m%d' is default DatePattern.

    Params : DatePattern eg:- '%Y%m%d'

    Returns: NONE

  • get_default_date_pattern

    Desc : This method will return the date format which will be used to convert the date to epoch.

    Params : NONE

    Returns: DatePattern eg:- '%Y%m%d'

  • set_default_timezone

    Desc : This method is used to set timezone which will be used while converting date to epoch. GMT is a default timezone.

    Params : Timezone eg:- 'GMT'

    Returns: NONE

  • get_default_timezone

    Desc : This method will return timezone which will be used while converting timestamp to epoch

    Params : NONE

    Returns: Timezone eg:- 'GMT'

  • read

    Desc : This method is used to read the line by line values

    Params : FileHandle

    Returns: HASHRef as Mentioned in the StringMapper

         Eg : {
                  'Address' => {
                    'DoorNo' => '84',
                    'Street' => 'SOUTH STREET'
                  },
                  'Country' => 'USA',
                  'Id' => '001',
                  'Name' => 'XXXXX YYYYYYY'
               }
    
  • read_all

    Desc : This method is used to read complete file

    Params : FileHandle

    Returns: HASHRef as Mentioned in the StringMapper

         Eg : [
                 {
                   'Address' => {
                     'DoorNo' => '84',
                     'Street' => 'SOUTH STREET'
                   },
                   'Country' => 'USA',
                   'Id' => '001',
                   'Name' => 'XXXXX YYYYYYY'
                 },
                 {
                   'Id' => '001',
                   'Mark1' => '82',
                   'Mark2' => '86',
                   'Mark3' => '98',
                   'Mark4' => '90'
                 },
                 {
                   'Address' => {
                     'DoorNo' => '69',
                     'Street' => 'BELL STREET'
                   },
                   'Country' => 'UK',
                   'Id' => '002',
                   'Name' => 'YYYYYYY'
                 },
                 {
                   'Id' => '002',
                   'Mark1' => '88',
                   'Mark2' => '69',
                   'Mark3' => '89',
                   'Mark4' => '39'
                 }
               ]
    

LICENSE

This library is free software; you can redistribute and/or modify it under the same terms as Perl itself.

AUTHORS

Venkatesan Narayanan, venkatesanmusiri@gmail.com