in reply to Re^2: Text file processing question
in thread Text file processing question

I now have to get down to the business of understanding the regular expression.

There's not much to it really. Essentially the input file consists of 5 groups of non-whitespace characters interpersed with whitespace.

The only fly in that ointment is the 4th field which itself contains whitepace, and so prevents trival parsing with split. Luckily, as only one field contains multiple words, we can let the regex engine sort it out for us. Ask it for the first 3 whitespace delimited fields, and the last one. And the fourth field is everything left over.

You might find it clearer expanded out like this:

m[ ( \S+ ) \s+ ( \S+ ) \s+ ( \S+ ) \s+ ( .+ ) \s+ ( \S+ ) $ ]x

Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.
RIP PCW It is as I've been saying!(Audio until 20090817)

Replies are listed 'Best First'.
Re^4: Text file processing question
by perl_seeker (Scribe) on Dec 09, 2009 at 11:07 UTC
    What if more than one field contains multiple words ?

    In fact now i have multiple words in more than one field:
    Nancy Drew Elm Street 600.00 New service Single Stella Barry Pine Avenue 1000.00 Replacement Single Julie Green Palm Street 400.00 Replacement Three Debbie Brown Baker Avenue 800.00 New service Three
    perl_seeker
      #! perl -slw use strict; print "Name of consumer Subdivision Amount Type of work Phase"; printf "%-14s %14s %7.2f %-14s %-s\n", m[(\S+\s\S+)\s+(\S+\s\S+)\s+(\S+)\s+(.+)\s+(\S+)$] while <DATA>; __DATA__ Nancy Drew Elm Street 600.00 New service Single Stella Barry Pine Avenue 1000.00 Replacement Single Julie Green Palm Street 400.00 Replacement Three Debbie Brown Baker Avenue 800.00 New service Three
        Excellent, thank you very much :)

        perl_seeker
        The re appears not to work for this set of data: i.e if each field can have single words/multiple words except the amount field
        Nancy Elm Street 600.00 New service Single phase Stella Barry Petersburg 1000.00 Replacement Single Julie Palm Street 400.00 Replacement Three phase Debbie Brown Bakerville 800.00 New service Three
        perl_seeker