1234 2321 0 45 1st
2122 sdsa 0 0 34
2313 dsad 43 2nd
1232 ffff 0 0 1st
3213 sadf 0 34
2133 dada 0 2nd
As it is seen, there is different number of spaces between columns. So /\s/ is not working as well as /\s+/ is not working, because some columns have whitespace characters. Also substr function does not work due to same reason. Substr does not see whitespace character and passes to next column. I hope told my problem clearly:) | [reply] [d/l] |
Your data is in fixed-width fields. The third column always starts at the same character position one line after another. substr would work just fine for this. Given the example data you posted, you just need to start at the 15th position, and read two characters. In other words, my $third_col = substr $line, 15, 2;
In fact, it's possible that you could just start at the 16th position and read a single character, but I would need to know more about the input data before I could be sure.
Anyway, for the data you posted, this works fine:
use v5.14;
say unpack( 'x15A2' ) =~ s/^\s+|\s+$//gr while <DATA>;
__DATA__
1234 2321 0 45 1st
2122 sdsa 0 0 34
2313 dsad 43 2nd
1232 ffff 0 0 1st
3213 sadf 0 34
2133 dada 0 2nd
I used unpack instead of substr, but either one would work fine.
| [reply] [d/l] [select] |