delphi 中 字符串分割函数 ExtractStringsEx,是ExtractStrings函数的扩展

使用ExtractStrings函数发现不能分割出空串,很是郁闷,发现delphi提供ExtractStrings的代码,打开看看修改了一下,实现增加空串的功能,如下
function ExtractStringsEx(Separators, WhiteSpace: TSysCharSet; Content: PChar;
  Strings: TStrings): 
Integer;
var
  Head, Tail: PChar;
  EOS, InQuote: 
Boolean;
  QuoteChar: 
Char;
  Item: 
string;
begin
  Result :
= 0;
  
if (Content = nil) or (Content^=#0or (Strings = nil) then Exit;
  Tail :
= Content;
  InQuote :
= False;
  QuoteChar :
= #0;
  Strings.BeginUpdate;
  
try
    repeat
      
while Tail^ in WhiteSpace + [#13, #10do Tail := StrNextChar(Tail); //忽略每个分割前面的字符
      Head :
= Tail;
      
while True do
      begin
        
while (InQuote and not (Tail^ in [QuoteChar, #0])) or
          
not (Tail^ in Separators + [#0, #13, #10'''', '"']) do Tail := StrNextChar(Tail);
        if Tail^ in ['''', '"'] then
        begin
          
if (QuoteChar <> #0and (QuoteChar = Tail^then
            QuoteChar :
= #0
          
else if QuoteChar = #0 then
            QuoteChar :
= Tail^;
          InQuote :
= QuoteChar <> #0;
          Tail :
= StrNextChar(Tail);
        
end else Break;
      
end;
      EOS :
= Tail^ = #0;
      
if (Head <> Tail) and (Head^ <> #0then
      begin
        
if Strings <> nil then
        begin
          SetString(Item, Head, Tail 
- Head);
          Strings.Add(Item);
        
end;
        Inc(Result);
      
end
      
else if Head^ <> #0 then  //如果头尾相同则增加空串 else if 后面的内容是我增加的
      begin
        
if Strings <> nil then
          Strings.Add(
'');
        Inc(Result);
      
end;

      Tail :
= StrNextChar(Tail);
    
until EOS;
  
finally
    Strings.EndUpdate;
  
end;
end;
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值