带 CommaText 的字符串列表返回逗号和空格,而不仅仅是 Delphi 中的逗号

use*_*758 1 delphi tstringlist

我有一个字符串列表,每个字符串看起来都是这样的。

2023/01/30,08:47:27, 0. 7.71,CM212-A2,03,Bad head/nozzle detect,380000,Stage No1, Head No2, Nozzle Postion5, Nozzle No0, (Single Lane), PCB ID:                , Bad head/nozzle detectReset
Run Code Online (Sandbox Code Playgroud)

然后我将该字符串添加到另一个带有逗号文本的列表中,并且应该给出如下结果

2023/01/30
08:47:27
0. 7.71
CM212-A2
03
Bad head/nozzle detect
Run Code Online (Sandbox Code Playgroud)

相反,它返回

2023/01/30
08:47:27
0. 
7.71
CM212-A2
03
Bad 
head/nozzle 
detect
Run Code Online (Sandbox Code Playgroud)

看起来它会像我想要的那样为每个逗号创建一个新字符串,但也会为我不想要的每个空格创建一个新字符串。

添加代码以防万一需要。

procedure TForm4.Button1Click(Sender: TObject);
var
datalist : tstringlist;
eventlist : tstringlist;
  i,x: Integer;
  filename : string;
  Event : array[1..200] of TEvent;
begin
datalist := tstringlist.Create;
eventlist := tstringlist.Create;
X := 1;

//get latest file
   filename := getlastmodifiedfilename('C:\Users\tngmorse\Desktop\LockHeads\Win32\Debug\');
//end



datalist.LoadFromFile(filename);

//search for head lockout
for i := 0 to datalist.count - 1 do
begin

  if containstext(datalist[i],'Bad head') then
  begin
    memo1.Lines.Add(datalist[i]);
   // eventlist.Clear;
    eventlist.CommaText := datalist[i];
   // Event[x].Dateofevent := 'today';
    Event[x].Dateofevent := eventlist[0];    //spaces are also breaking it.
    Event[x].Timeofevent := eventlist[1];
    Event[x].Version := eventlist[2];
    Event[x].Machine := Eventlist[3];
    Event[x].EventNumber := Eventlist[4];
    Event[x].EventName := Eventlist[5];
    Event[x].TableNumber := EventList[6];
    Event[x].Table := Eventlist[7];
    Event[x].Head := Eventlist[8];
    Event[x].Nozzle := EventList[9];
    Event[x].NozzleType := Eventlist[10];
    Event[x].Lane := Eventlist[11];
    Event[x].PCBID := Eventlist[12];
    Event[x].Effect := Eventlist[13];


    memo1.Lines.Add('Date: '+Event[x].Dateofevent);
    memo1.Lines.Add('Time: '+Event[x].Timeofevent);
    memo1.Lines.Add('Machine: '+Event[x].Machine);
    memo1.Lines.Add('Event: '+Event[x].EventName);
    memo1.Lines.Add('Table: '+Event[x].Table);
    memo1.Lines.Add('Head: '+Event[x].Head);
    memo1.Lines.Add('Nozzle: '+Event[x].Nozzle);
    memo1.Lines.Add('Status: '+Event[x].Effect);



     x:=x+1;
//break down list by comma
//add to record


  end;

end;

//end

showmessage('lines: '+inttostr(datalist.Count));
datalist.Destroy;

end;
Run Code Online (Sandbox Code Playgroud)

Uwe*_*abe 10

此行为可以由属性控制StrictDelimiter

如果StrictDelimiter为 True,则 中的各个字符串DelimitedText仅由 分隔Delimiter或用引号引起来QuoteChar如果StrictDelimiter为 False,则空格和不可打印字符也用作分隔符。

因此,将其设置为True以获得所需的行为。