in reply to Re: To split with spaces
in thread To split with spaces

Firstly, thank you for your quick answer.

My input data is exactly:

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:)

Replies are listed 'Best First'.
Re^3: To split with spaces
by davido (Cardinal) on Aug 05, 2013 at 05:33 UTC

    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.


    Dave