And I missed the whole 'Escaping Double Quotes' thread -- so this is already covered... Skip this post!! ;-)
-----Original Message----- From: u2-users-boun...@listserver.u2ug.org [mailto:u2-users-boun...@listserver.u2ug.org] On Behalf Of David Wolverton Sent: Thursday, August 16, 2012 5:42 PM To: 'U2 Users List' Subject: Re: [U2] CSV to Array You can't have "3/4" Bolts" in the data stream -- that would not work. So that means the embedded " has to be 'escaped' - usually by a \.. So you'd have "3/4\" Bolts" or the like ... right? In that case, you'd want to 'swap' out the \" for some other 'hold character' first -- like &&DQOUTE&& And Then swap out the 'remaining' '"' out as listed. I did forget that! At the very end, you 're-swap' &&DQUOTE&& for '"' DW -----Original Message----- From: u2-users-boun...@listserver.u2ug.org [mailto:u2-users-boun...@listserver.u2ug.org] On Behalf Of Mecki Foerthmann Sent: Thursday, August 16, 2012 2:26 AM To: u2-users@listserver.u2ug.org Subject: Re: [U2] CSV to Array The moment you start working in the engineering or manufacturing industry where it is not uncommon to have double quotes embedded in a field (i.e 5 1/4" Steel Bar) your code will bite you. On 15/08/2012 23:24, David Wolverton wrote: > I've done this in the past by doing this: > > SWAP DQUOTE WITH @AM > > Now, in theory, every EVEN attribute is a 'quoted' string - don't > touch the commas.... > Every ODD attribute is a 'non-quoted' string... > > Double check me here in case I've lost it... but this should work ... > seems this would be faster as well on larger records. Only thing > you'd have to test for -- if the first character is a doublequote, we > will have a blank first attribute and should not -- but that could be > tested in the END ELSE section (IF XXX = 1 THEN IF DATASTRING[1,1] = 1 > THEN CONTINUE) > > DATASTRING = 'A,B,"C,D",E,F,"G,H,I",J,K,L NEWSTRING = "" > SWAP '"' WITH @AM IN DATASTRING > AMCNT = DCOUNT(DATASTRING,@AM) > FOR XXX = 1 TO AMCNT > IF MOD(AMCNT,2) = 0 THEN > NEWSTRING := @AM: DATASTRING<XXX> > END ELSE > DATAROW = NEWSTRING<XXX> > SWAP ',' WITH @AM IN DATAROW > NEWSTRING := @AM:DATAROW > NEWSTRING<-1> = DATAROW > END > NEXT XXX > > > -----Original Message----- > From: u2-users-boun...@listserver.u2ug.org > [mailto:u2-users-boun...@listserver.u2ug.org] On Behalf Of Wjhonson > Sent: Wednesday, August 15, 2012 4:11 PM > To: u2-users@listserver.u2ug.org > Subject: [U2] CSV to Array > > > Rex Gozar uploaded this code, and someone (perhaps him) corrected it, > but there's a redundancy here. I'm trying to fix it, in my own > version, mostly > perhaps I *hate* the CONTINUE, but the logic is a bit convoluted eh? Anyone > spot the redundancy ? > > EQU COMMA TO ',' > EQU DQ TO '"' > BUFFER = TEXT > BUFPTR = 0 > CPTR = 0 > QUOTESW = @FALSE > LOOP > CPTR += 1 > C = BUFFER[CPTR,1] > WHILE (C NE "") DO > IF (DQ EQ C) THEN > IF (QUOTESW) AND (DQ:DQ EQ BUFFER[CPTR,2]) THEN > CPTR += 1 > END ELSE > QUOTESW = NOT(QUOTESW) > CONTINUE > END > END > IF (COMMA EQ C) AND NOT(QUOTESW) THEN > C = @FM > END > BUFPTR += 1 > BUFFER[BUFPTR,1] = C > REPEAT > RECORD = BUFFER[1,BUFPTR] > RETURN > END > > _______________________________________________ > U2-Users mailing list > U2-Users@listserver.u2ug.org > http://listserver.u2ug.org/mailman/listinfo/u2-users > > _______________________________________________ > U2-Users mailing list > U2-Users@listserver.u2ug.org > http://listserver.u2ug.org/mailman/listinfo/u2-users > _______________________________________________ U2-Users mailing list U2-Users@listserver.u2ug.org http://listserver.u2ug.org/mailman/listinfo/u2-users _______________________________________________ U2-Users mailing list U2-Users@listserver.u2ug.org http://listserver.u2ug.org/mailman/listinfo/u2-users _______________________________________________ U2-Users mailing list U2-Users@listserver.u2ug.org http://listserver.u2ug.org/mailman/listinfo/u2-users