Delphi 字符串拆分/分割[2] - Classes.ExtractStrings
Delphi 字符串拆分/分割[2] - Classes.ExtractStrings
原型:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | function ExtractStrings(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^=# 0 ) or (Strings = nil ) then Exit; Tail := Content; InQuote := False ; QuoteChar := # 0 ; Strings . BeginUpdate; try repeat while Tail^ in WhiteSpace + [# 13 , # 10 ] do 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 <> # 0 ) and (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^ <> # 0 ) then begin if Strings <> nil then begin SetString(Item, Head, Tail - Head); Strings . Add(Item); end ; Inc(Result); end ; Tail := StrNextChar(Tail); until EOS; finally Strings . EndUpdate; end ; end ; |
参数:
- Separators //分隔符,可以是多个,例如 [';',',',':'] 可以按分号、逗号、分号来同时分割。
- WhiteSpace //开头被忽略字符,例如['<','>',' '],被分割出的字符,如果开头有大于号,小于号,或者分号,被分割出来后会被忽略。
- Content //被分割的字符串。
- Strings //返回字符串
返回值:
分割出的字符串数量。
用法示例:
1 2 3 4 5 6 7 8 9 10 | var S: string ; SL: TStringList; begin S := '222,777,888 ' ; SL := TStringList . Create; ExtractStrings([ ',' ],[], PChar (S),SL); ShowMessage(SL . Text); SL . Free; end ; |
1 2 3 4 5 6 7 8 9 10 | var s: String ; List: TStringList; begin s := 'delphi: #你好; #pascal, 程序' ; List := TStringList . Create; ExtractStrings([ ';' , ',' , ':' ],[ '#' , ' ' ], PChar (s),List); //第一个参数是分隔符; 第二个参数是开头被忽略的字符 ShowMessage(List . Text); List . Free; end ; |
创建时间:2021.01.07 更新时间:
博客园 滔Roy https://www.cnblogs.com/guorongtao 希望内容对你有所帮助,谢谢!
分类:
Delphi C函数/过程
, Delphi 数据_字符串
标签:
Delphi
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
2020-01-07 SQL 数据库 关于数量为空取零的区别
2020-01-07 Delphi SQL报错 SQL statement doesn't return rows