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: [email protected]
[mailto:[email protected]] On Behalf Of Wjhonson
Sent: Wednesday, August 15, 2012 4:11 PM
To: [email protected]
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
[email protected]
http://listserver.u2ug.org/mailman/listinfo/u2-users
_______________________________________________
U2-Users mailing list
[email protected]
http://listserver.u2ug.org/mailman/listinfo/u2-users