Search code examples
delphitstringlist

Stringlist with CommaText is returning comma and spaces instead of just comma in Delphi


I have a string list, each string looks something like this.

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

I am then adding that string into another list with commatext, and should be giveing a result like so

2023/01/30
08:47:27
0. 7.71
CM212-A2
03
Bad head/nozzle detect

Instead it returns

2023/01/30
08:47:27
0. 
7.71
CM212-A2
03
Bad 
head/nozzle 
detect

It seems it will create a new string for each Comma like I want, but also is creating a new string for each space which I don't want.

Adding Code just incase its needed.

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;

Solution

  • This behavior can be controlled by the StrictDelimiter property:

    If StrictDelimiter is True, individual strings in DelimitedText are only separated by Delimiter or quoted between QuoteChar. If StrictDelimiter is False, spaces and non-printable character are also used as delimiters.

    So, set it to True to get the desired behavior.