如何在Delphi中检查TStringList的长度

11

这就是我想做的事情。我有一个TStringList,里面有一个名字。如果名字的格式是DOE,JOHN,NMI,我想把名字拆分成3个不同的字符串。
但问题是,如果没有中间名或名字,该怎么办?比如可能只有DOE,那么最后两行就超出范围了。程序会崩溃。最好的解决方案是什么呢?

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

除了David的好解决方案之外,最好有一个完全填充的CSV文件。如果某个元素丢失,它只会有逗号。 例如:DOE将是DOE,,这样即使没有混乱也可以正常拆分。 - Chris Thornton
3
@Chris: David?哪个David?哈姆! :P - dthorpe
1个回答

16

使用 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;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接