Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to check length of Tstringlist in delphi

Tags:

delphi

This is what I am trying to do. I have a Tstringlist, for a name. If the name is in a format DOE, JOHN, NMI, I want it to split the name into 3 different strings.
But the problem is, what if there is no middle initial. Or First name. Like it could be just DOE, Then the last two lines are out of bounds. And the program crashes. What is the best solution?

var ptname, physname: Tstringlist;

if pos(',',Msg.Grp2[0].ObsReq[0].OrderingProviderFamilyName) > 0 then // split it if it has a comma
begin
  physname := TstringList.Create;
  physname.CommaText := Msg.Grp2[0].ObsReq[0].OrderingProviderFamilyName;
  Parameters.ParamByName('@OrderingLastNameOBR16').Value := physname[0];
  Parameters.ParamByName('@OrderingFirstNameOBR16').Value := physname[1];
  Parameters.ParamByName('@OrderingMiddleNameOBR16').Value := physname[2];
  physname.Free;
end
like image 799
Rob Avatar asked Mar 03 '11 16:03

Rob


1 Answers

Use TStringList.Count.

  physname := TstringList.Create;
  physname.CommaText := Msg.Grp2[0].ObsReq[0].OrderingProviderFamilyName;
  if physname.Count > 0 then
  begin
    Parameters.ParamByName('@OrderingLastNameOBR16').Value := physname[0];
    if physname.Count > 1 then
    begin
      Parameters.ParamByName('@OrderingFirstNameOBR16').Value := physname[1];
      if physname.Count > 2 then
      begin
        Parameters.ParamByName('@OrderingMiddleNameOBR16').Value := physname[2];
      end;
    end;
  end;
  physname.Free;
like image 72
dthorpe Avatar answered Oct 20 '22 09:10

dthorpe