Easy, split by " :)

Ok, this all assumes we don't have embedded parentheses in the quoted fields (If you do, it gets more complicated). But if you have a variable, $row, let's say, with the following value:

1,"Hugo,Inc.",4,"This is a test",34.5, 17.9, "Marc, Cindy and Rob"

Now, if you split this variable on ", and store it in @splitArray, then you will get the following:

$splitArray[0] = 1, $splitArray[1] = Hugo, Inc. $splitArray[2] = ,4, $splitArray[3] = This is a test $splitArray[4] = ,34.5,17.9, $splitArray[5] = Marc, Cindy and Rob

Now, notice that all of the even subscripts contain the entries that were not in quotes, while the odd subscripts contain the quoted strings. Therefore...

use strict; my $row = "1, \"Hugo, Inc.\", 4, \"This is a test\", 34.5, 17.9, \"Mar +c, Cindy and Rob\""; print "ROW: $row\n"; my @splitArray = split '\"', $row; my @answerArray; for ( my $i = 0 ; $i <= $#splitArray ; $i++ ) { my @tempArray; if ( $i % 2 == 0 ) # if $i is even { @tempArray = split ',', $splitArray[$i]; } else # if $i is odd { @tempArray = ( $splitArray[$i] ); } # Shove all of @tempArray into @answerArray while ( @tempArray ) { if ( $i % 2 == 0 ) { $tempArray[0] =~ s/ //g; } if ( $tempArray[0] =~ /\S/ ) { push @answerArray, shift @tempArray; } else { shift @tempArray; } } } foreach my $answer ( @answerArray ) { print "$answer\n"; }

There is some extra little cleanup garbage in there which you might not want, but that has the basic idea. Hope it helps.

Some people drink from the fountain of knowledge, others just gargle.


In reply to Re: split problems by DeusVult
in thread split problems by michellem

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.