Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Preserving blank columns & adding delimiters when reading fixed width data

I am parsing through a file.

The file format is like this:


Column1  Column2  Column3  Column4  Column5
1        2        3        4        5
6        7                 8        9
10       11       12                14
         15       16       17       18

Some of the Column's are empty. So I am reading two files having same format as above and merging both files and adding the "|" between each column so it should look like this:


Column1 | Column2 | Column3 | Column4 | Column5
1       | 2       | 3       | 4       | 5
6       | 7       |         | 8       | 9
10      | 11      | 12      |         | 14
        | 15      | 16      | 17      | 18

But I'm getting like this. The spaces in columns are removed.


Column1 | Column2 | Column3 | Column4 | Column5
1       | 2       | 3       | 4       | 5
6       | 7       | 8       | 9
10      | 11      | 12      | 14
15      | 16      | 17      | 18

Code part:

while(<FH>){
   my @lines =split ' ',$_;
   say (join '|',@lines);
}

I know this is happening because I am splitting with space delimiter. Can anyone tell me how to get the desired output?

like image 847
Alexx Avatar asked Jun 28 '26 10:06

Alexx


1 Answers

You can use unpack to parse fixed-width data. The A9 in the template assumes your columns are 9 characters wide. You can use sprintf to space the data out again into columns of the original width.

use warnings;
use strict;

while (<DATA>) {
    chomp;
    printf "%s\n", join '| ', map { sprintf '%-8s', $_ } unpack 'A9' x 5, $_;
}

__DATA__
Column1  Column2  Column3  Column4  Column5
1        2        3        4        5
6        7                 8        9
10       11       12                14
         15       16       17       18

This prints:

Column1 | Column2 | Column3 | Column4 | Column5 
1       | 2       | 3       | 4       | 5       
6       | 7       |         | 8       | 9       
10      | 11      | 12      |         | 14      
        | 15      | 16      | 17      | 18      
like image 76
toolic Avatar answered Jul 01 '26 00:07

toolic



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!