Dephi里string转化为TStringList的每个行

menglanxiang 2014-06-13 03:37:01
需要解析的内容如下 我希望得到一个TStringList每个元素是逗号分隔的效果

'2014-06-02 11:26:47,2014-06-02 13:09:05,签收,到达:<span id=510556 class="wltz">广东广州白云区马务公司(510556)</span> 由 图片 签收。,1900708440300,,,;2014-05-31 23:24:37,2014-05-31 23:30:45,揽件扫描,到达:<span id=518000 class="wltz">广东深圳公司(518000)</span> 上级站点:<span id=518889 class="wltz">广东深圳公司龙岗区民治惠鑫分部(518889)</span> 发往:<span id=0 class="wltz">(0)</span> 揽件人员:广东深圳公司,1900708440300,收件7号(075561886188),20,0;2014-06-01 14:58:51,2014-06-01 14:59:19,异常签收,到达:<span id=510556 class="wltz">广东广州白云区马务公司(510556)</span> 备注:节假日,客户上班后派送,1900708440300,,,;2014-06-01 12:36:50,2014-06-01 12:41:23,派送扫描,到达<span id=510556 class="wltz"> 广东广州白云区马务公司(510556)</span> 上级站点:<span id=510001 class="wltz">广东广州分拨中心(510001)</span> 发往:<span id= class="wltz">()</span>,1900708440300,,20,;2014-05-31 23:59:58,2014-06-01 00:03:04,网点集包扫描,到达:<span id=518069 class="wltz">广东深圳公司龙岗区民治明创集包分部(518069)</span> 装入大包 <span id=9000114882440 class="dbcx">9000114882440</span> 发往:<span color='red'>广东广州网点包(510046)</span>,1900708440300,,,;2014-06-01 09:26:13,2014-06-01 09:26:34,出中转公司扫描,到达:<span id=510001 class="wltz">广东广州分拨中心(510001)</span> 格口号:GK076 发往:<span id=510556 class="wltz">广东广州白云区马务公司(510556)</span>,1900708440300,蓝国献,,;2014-05-31 23:38:20,2014-06-01 01:14:51,揽件扫描,到达:<span id=518069 class="wltz">广东深圳公司龙岗区民治明创集包分部(518069)</span> 上级站点:<span id=518123 class="wltz">广东深圳公司国际部(518123)</span> 发往:<span id=0 class="wltz">(0)</span> 揽件人员:广东深圳公司龙岗区民治明创集包分部,1900708440300,,20,0.2;2014-06-01 02:08:08,2014-06-01 02:08:33,揽件扫描,到达:<span id=518000 class="wltz">广东深圳公司(518000)</span> 上级站点:<span id=518000 class="wltz">广东深圳公司(518000)</span> 发往:<span id=510001 class="wltz">广东广州分拨中心(510001)</span> 揽件人员:广东深圳公司,9000114882440,PA王星星(075561886188),20,13.30;2014-06-01 02:09:55,2014-06-01 02:17:57,装车,到达:<span id=518000 class="wltz">广东深圳公司(518000)</span> 装上发车凭证:31001344081(预计发出:2014-06-01 01:00:00 预计到达:2014-06-01 03:45:00) 发往:<span id=510001 class="wltz">广东广州分拨中心(510001)</span> ,9000114882440,PA余建兵(075561886188),20,;2014-06-01 01:14:17,2014-06-01 01:36:58,揽件扫描,到达:<span id=518069 class="wltz">广东深圳公司龙岗区民治明创集包分部(518069)</span> 上级站点:<span id=518123 class="wltz">广东深圳公司国际部(518123)</span> 发往:<span id=0 class="wltz">(0)</span> 揽件人员:广东深圳公司龙岗区民治明创集包分部,9000114882440,,20,13'

自己写的Delphi代码
 MTStringList := TStringList.Create;
MTStringList.Delimiter := ',';
MTStringList.DelimitedText:= Mtemp;
得到的TStringList对象不是想要的
...全文
523 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
xhz8000 2014-06-14
  • 打赏
  • 举报
回复
Count := ExtractStrings([','],[],PChar('a,b,cd,efg,aaa,acdf'),StrList); 这个函数一直没有被我用! 今天看眼界了! 经测试这个应该可以实现楼主的功能!
xhz8000 2014-06-14
  • 打赏
  • 举报
回复
MTStringList.StrictDelimiter := True; wr960204 不知道王大侠的d是什么版本? 我以为我不知道有这个东西呢!
haochin 2014-06-13
  • 打赏
  • 举报
回复
Count := ExtractStrings([','],[],PChar('a,b,cd,efg,aaa,acdf'),StrList);
StrList返回你想要的按,号分割的StringList, Count返回行数
tcmakebest 2014-06-13
  • 打赏
  • 举报
回复
自己实现一个类似 Split 的方法还是很有必要的.
nm_wyh 2014-06-13
  • 打赏
  • 举报
回复
忘了说参数了,补充一下。 s:就是你要分隔的原字符串。 Separator:就是按什么字符分隔(你这传逗号就行了) Terms:就是分隔字符串后存储的TStringList对象。
武稀松 2014-06-13
  • 打赏
  • 举报
回复
MTStringList := TStringList.Create; MTStringList.StrictDelimiter := True; MTStringList.Delimiter := ','; MTStringList.DelimitedText:= Mtemp;
nm_wyh 2014-06-13
  • 打赏
  • 举报
回复
class procedure TStrOper.str_intercept(s: string; Separator: char; Terms: TStrings); var hs : string; p : integer; begin Terms.Clear; // 清空StringList中的所有内容 if Length(s)=0 then // 字串长度0就退出 begin Exit; end; p:=Pos(Separator,s); while P<>0 do begin hs:=Copy(s,1,p-1); // 拷贝字串 Terms.Add(hs); // 添加到LIST中 Delete(s,1,p); // 删除刚拷贝的字串 p:=Pos(Separator,s); // 寻找下一个和指定字符的字串 end; if Length(s)>0 then Terms.Add(s); // 把盛下的字串添加到TERM中 end; 注意:Terms传递时必须在先初始化,否则会报错的。
xhz8000 2014-06-13
  • 打赏
  • 举报
回复
MTStringList := TStringList.Create; MTStringList.Delimiter := ','; MTStringList.DelimitedText:= Mtemp; 确实存在遇到空格时也会截断的
menglanxiang 2014-06-13
  • 打赏
  • 举报
回复
逗号分隔的每行
火龙岛主 2014-06-13
  • 打赏
  • 举报
回复
那你想要啥?
DELPHI文本整理器 样式像记事本 // 字符串处理功能 unit StringFunctions; interface uses Windows, Messages, SysUtils, Variants, Classes, Forms, Dialogs, StdCtrls, Commctrl; type TStringFunction = class(TObject) private function IsUpper(ch: char): boolean; function IsLower(ch: char): boolean; function ToUpper(ch: char): char; function ToLower(ch: char): char; public procedure ReplaceSelText(Edit: TCustomEdit; const s: String); procedure UpperSelText(Edit: TCustomEdit); procedure LowerSelText(Edit: TCustomEdit); function UpperFistLetter(Memo: TMemo): string; procedure ClearBlankLine(Memo: TMemo); procedure ClearBlankSpace(Memo: TMemo); procedure ClearNum(Memo: TMemo); procedure ClearLetter(Memo: TMemo); procedure InsertNumber(Memo: TMemo); procedure InsertComment(Memo: TMemo); procedure BatchReplaceString(Memo: TMemo); procedure JustOneLine(Memo: TMemo); procedure ReLine(Memo: TMemo; n: Integer); procedure TextToHtml(sTextFile, sHtmlFile: string); function Proper(const s: string): string; function CNWordsCount(text: string): Integer; function ENWordsCount(text: string): Integer; end; var StrFunction: TStringFunction; implementation // 让代码设置Memo后可以让memo在Ctrl+Z撤销有效 procedure TStringFunction.ReplaceSelText(Edit: TCustomEdit; const s: String); begin SendMessage(Edit.Handle, EM_REPLACESEL, 1, LPARAM(PChar(s))); // Edit.Perform(EM_REPLACESEL, 1, LPARAM(PChar(s))); end; // Edit显示号 // ------------------------------------------------------------------------------ // 去除空 // Memo1.Text := StringReplace(Memo1.Text, #13#10#13#10, #13#10, [rfReplaceAll]); { //无法撤销 //空的去掉 //本只有空格的也去掉 //全选 //复制到剪切板上 } procedure TStringFunction.ClearBlankLine(Memo: TMemo); var i: Integer; list: TStringList; begin with Memo do begin if Lines.Count > 0 then begin list := TStringList.Create; for i := 0 to Lines.Count - 1 do if (Trim(Lines[i]) <> '') then list.Add(Lines[i]); SelectAll; ReplaceSelText(Memo, list.text); list.Free; end; end; end; // 去除空格 // 将 空格替换为空 procedure TStringFunction.ClearBlankSpace(Memo: TMemo); var s: string; begin s := StringReplace(Memo.Lines.text, ' ', '', [rfReplaceAll]); Memo.SelectAll; ReplaceSelText(Memo, s); end; // 去除一字符串中的所有的数字 procedure TStringFunction.ClearNum(Memo: TMemo); var str: string; i: Integer; begin str := '1234567890'; for i := 0 to Length(str) do Memo.text := StringReplace(Memo.Lines.text, str[i], '', [rfReplaceAll]); { rfReplaceAll TReplaceFlags = set of (rfReplaceAll, rfIgnoreCase); } end; // 去除一字符串中的所有的字母 procedure TStringFunction.ClearLetter(Memo: TMemo); var str: string; i: Integer; begin str := 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; for i := 0 to Length(str) do Memo.text := StringReplace(Memo.Lines.text, str[i], '', [rfReplaceAll]); end; // 批量替换关键字 procedure TStringFunction.BatchReplaceString(Memo: TMemo); var i: Integer; begin for i := 0 to Length(Memo.Lines.text) do Memo.text := StringReplace(Memo.Lines.text, Memo.Lines[i], '', [rfReplaceAll]); ClearBlankSpace(Memo); end; // ------------------------------------------------------------------------------ // 全角转半角 // 符号有哪些 procedure ConvertQtoB; begin end; // 半角转换全角 procedure ConvertBtoQ; begin end; { 转换选中的文本大写 } procedure TStringFunction.UpperSelText(Edit: TCustomEdit); var x, y: Integer; begin With Edit do begin x := SelStart; y := SelLength; if SelText <> '' then begin ReplaceSelText(Edit, UpperCase(SelText)); SelStart := x; SelLength := y; end else begin Edit.SelectAll; ReplaceSelText(Edit, UpperCase(Edit.text)); end; end; end; { 转换选中的文本小写 } procedure TStringFunction.LowerSelText(Edit: TCustomEdit); var x, y: Integer; begin With Edit do begin x := SelStart; y := SelLength; if SelText <> '' then begin ReplaceSelText(Edit, LowerCase(SelText)); SelStart := x; SelLength := y; end else begin Edit.SelectAll; ReplaceSelText(Edit, LowerCase(Edit.text)); end; end; end; { 判断字符是否是大写字符 } function TStringFunction.IsUpper(ch: char): boolean; begin Result := ch in ['A' .. 'Z']; end; { 判断字符是否是小写字符 } function TStringFunction.IsLower(ch: char): boolean; begin Result := ch in ['a' .. 'z']; end; { 转换为大写字符 } function TStringFunction.ToUpper(ch: char): char; begin Result := chr(ord(ch) and $DF); end; { 转换为小写字符 } function TStringFunction.ToLower(ch: char): char; begin Result := chr(ord(ch) or $20); end; { Capitalizes First Letter Of Every Word In S 单语首字母大写 } function TStringFunction.Proper(const s: string): string; var i: Integer; CapitalizeNextLetter: boolean; begin Result := LowerCase(s); CapitalizeNextLetter := True; for i := 1 to Length(Result) do begin if CapitalizeNextLetter and IsLower(Result[i]) then Result[i] := ToUpper(Result[i]); CapitalizeNextLetter := Result[i] = ' '; end; end; { Memo选中的首字母大写 } function TStringFunction.UpperFistLetter(Memo: TMemo): string; var i, j: Integer; begin with Memo do begin i := SelStart; j := SelLength; // SelText := Proper(SelText); ReplaceSelText(Memo, Proper(SelText)); SelStart := i; SelLength := j; end; end; // ------------------------------------------------------------------------------ procedure TStringFunction.InsertNumber(Memo: TMemo); var i: Integer; str: String; begin for i := 0 to Memo.Lines.Count do begin str := Format('%.4d. %s', [i, Memo.Lines[i]]); Memo.Lines[i] := str; Application.ProcessMessages; end; end; // 注释和取消注释 // 获得选中的文本的起始和结束 procedure TStringFunction.InsertComment(Memo: TMemo); var str: string; x, y: Integer; begin str := Memo.SelText; x := Memo.SelStart; y := Memo.SelLength; if str = '' then Exit; // Memo.SetSelText('//' +str); Memo.SelText := '//' + str; Memo.SelStart := x + 2; Memo.SelLength := y + 2; end; // ------------------------------------------------------------------------------ // 合并成一 procedure TStringFunction.JustOneLine(Memo: TMemo); var s: string; i: Integer; begin for i := 0 to Memo.Lines.Count - 1 do s := s + Memo.Lines[i]; Memo.SelectAll; ReplaceSelText(Memo, s); end; // ------------------------------------------------------------------------------ // 重新分 { var n: Integer; begin n := StrToInt(InputBox('重新分', '每几个字符', '8')); ReLine(Memo1, n); end; } procedure TStringFunction.ReLine(Memo: TMemo; n: Integer); var s: string; i, j, k: Integer; L: TStringList; begin L := TStringList.Create; j := 1; for k := 0 to Memo.Lines.Count - 1 do s := s + Memo.Lines[k]; if Trim(s) <> '' then begin for i := 0 to (Length(s) div n) do // 几 begin j := j + n; L.Add(Copy(s, j - n, n)); // COPY 的第一位不是0是1 // 每的字符 end; end; Memo.SelectAll; ReplaceSelText(Memo, L.text); L.Free; end; // ------------------------------------------------------------------------------ // 获得汉字字符个数 function TStringFunction.CNWordsCount(text: string): Integer; var i, sum, c: Integer; begin Result := 0; c := 0; sum := Length(text); if sum = 0 then Exit; for i := 0 to sum do begin if ord(text[i]) >= 127 then begin Inc(c); end; end; Result := c; end; // 获得非汉字字符个数 function TStringFunction.ENWordsCount(text: string): Integer; var i, sum, e: Integer; begin Result := 0; e := 0; sum := Length(text); if sum = 0 then Exit; for i := 0 to sum do begin if (ord(text[i]) >= 33) and (ord(text[i]) <= 126) then begin Inc(e); end; end; Result := e; end; { TextToHtml('C:\1.txt','c:\2.htm'); } procedure TStringFunction.TextToHtml(sTextFile, sHtmlFile: string); var aText: TStringList; aHtml: TStringList; i: Integer; begin aText := TStringList.Create; try aText.LoadFromFile(sTextFile); aHtml := TStringList.Create; try aHtml.Clear; aHtml.Add(''); aHtml.Add(''); for i := 0 to aText.Count - 1 do aHtml.Add(aText.Strings[i] + '
'); aHtml.Add(''); aHtml.Add(''); aHtml.SaveToFile(sHtmlFile); finally aHtml.Free; end; finally aText.Free; end; end; Initialization StrFunction := TStringFunction.Create; Finalization StrFunction.Free; end.

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧