I posted code to parse a CSV string into a nested array containing the elements. It correctly handles surrounding quotes, embedded quotes, and empty fields. I am posting a GNU APL specific one here.
∇CSV∆Parse[⎕]∇
∇
[0] z←CSV∆Parse v;y;d;q
[1] d←','
[2] q←'"'
[3] ⍝ break apart columns into separate arrays, normalize embedded quotes, and remove surrounding quotes
[4] z←{((⍴⍵)⍴y,((0⌈¯2+⍴⍵)⍴1),y←~(q=¯1↑⍵)∧(q=1↑⍵)∧1<⍴⍵)/⍵←(-y)↓(⍲/(¯1+⍳⍴⍵)⌽(0 ¯1↓0,0 1↓(((⍴⍵)⍴q)∘.=⍵)),0)/⍵←⍵,(y←1=⍴,⍵)⍴' '}¨z←1↓1↓¨(1++\(z∊d)>≠\z∊q)⊂z←(1↑d),(1↑d),v
∇
CSV∆Parse 'abc,,"def","abc""def"'
┌→────────────────────────┐
│┌→──┐ ┌⊖┐ ┌→──┐ ┌→──────┐│
││abc│ │ │ │def│ │abc"def││
│└───┘ └─┘ └───┘ └───────┘│
└∊────────────────────────┘