使用Delphi用逗号分隔字符串,但忽略双引号中的逗号



我成功地将CSV读取到TStrings中,使用:过程TForm2.FormCreate(发件人: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上午,4/28/2021,";Wood Drive,ENFIELD,CT"Calini,CBM";,3223837,恩菲尔德,哈特福德,1,3,无竣工附加

20211300637,03/29/2021-上午11:48:51,2021年4月1日,";恩菲尔德街,恩菲尔德,CT";,CBM,3223846,恩菲尔德,哈特福德,2.0,作业变更为空中

现在我正在尝试将每一行读取到一个动态数组中,以便分配每个字段。

procedure TForm2.Button2Click(Sender: TObject);
var
i:integer;
TicketNumber:string;
oneStr: TStringDynArray;
val:double;
begin
SL.LoadFromFile('D:DelphiProjectsImportCSVPURA 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;

我得到的是:票务编号:20211605344工作日期:2021年4月23日上午09:26:42工作开始时间:2021年8月4日地址:";Wood Drive Crew:ENFIELD项目:CT";城镇:";卡利尼县:CBM;订单:3223837计数:ENFIELD注:Hartford票务编号:20211300637工作日期:2021年3月29日上午11:48:51工作开始时间:2021年4月1日地址:";恩菲尔德街工作人员:恩菲尔德项目:CT";城镇:CBM县:3223846订单:恩菲尔德计数:哈特福德注:2

它还打断了双引号中的逗号!!我该如何防止这种情况发生?谢谢Delphi 11.2

正如Ken White所说,该记录需要使用Pos语句手动解析并复制。但我的解决方案是让我的客户将excel导出为制表符分隔的文本,这允许我使用#9作为严格的分隔符。

最新更新