Split a string by commas but ignore commas within double-quotes using Delphi

Viewed 7

I successfully read the CSV into TStrings using: procedure TForm2.FormCreate(Sender: TObject);

begin
  SL := TStringList.Create;
  SL.Delimiter := ',';        // default, but ";" is used with some locales
  SL.QuoteChar := '"';        // default
  SL.StrictDelimiter := True; // required: strings are separated *only* by Delimiter
end; 

20211605344,04/23/2021 - 09:26:42 am,4/28/2021,"Wood Drive, ENFIELD, CT","Calini, CBM",3223837, ENFIELD,Hartford,1,3,No as-built attached

20211300637,03/29/2021 - 11:48:51 am,4/1/2021,"Enfield Street, ENFIELD, CT",CBM,3223846, ENFIELD,Hartford,2,0,Job changed to aerial

Now I am trying to read each row into a dynamic array so I can assign each field.

procedure TForm2.Button2Click(Sender: TObject);
var
  i:integer;
  TicketNumber:string;
  oneStr: TStringDynArray;
  val:double;
begin
  SL.LoadFromFile('D:\DelphiProjects\ImportCSV\PURA Phase 2 inspection selection.csv');
  for I := 1 to SL.Count-1 do
  begin
    oneStr:= SplitString(SL[i], ',');
    TicketNumber:= oneStr[0];
    If TryStrToFloat(TicketNumber, val)then

    memo2.Lines.Add('TicketNo: '+oneStr[0]+' '+'Job Date: '+oneStr[1]+' '+ 'Job Start: '+oneStr[2]+' '+'Address: '+oneStr[3]+' '+ 'Crew: '+oneStr[4]+' '+'Project: '+oneStr[5]+' '+'Town: '+oneStr[6]+' '+'County: '+oneStr[7]+' '+'Order: '+oneStr[8]+' '+'Count: '+oneStr[9]+' '+'Note: '+oneStr[10]);
  end;

end;

What I am getting is: TicketNo: 20211605344 Job Date: 04/23/2021 - 09:26:42 am Job Start: 4/28/2021 Address: "Wood Drive Crew: ENFIELD Project: CT" Town: "Calini County: CBM" Order: 3223837 Count: ENFIELD Note: Hartford TicketNo: 20211300637 Job Date: 03/29/2021 - 11:48:51 am Job Start: 4/1/2021 Address: "Enfield Street Crew: ENFIELD Project: CT" Town: CBM County: 3223846 Order: ENFIELD Count: Hartford Note: 2

It is also breaking in the commas within the double quotes!! How can I prevent this? Thanks Delphi 11.2

0 Answers
Related