String Delphi 7-使用严格分隔符拆分字符串,而不使用新过程

String Delphi 7-使用严格分隔符拆分字符串,而不使用新过程,string,delphi,split,delphi-7,tstringlist,String,Delphi,Split,Delphi 7,Tstringlist,我需要使用“|”作为唯一的分隔符,将以下字符串拆分为TStringList: " 0.985,EError can't find,E| 0,5186,Name,6946" 然后我需要使用,“作为唯一的`分隔符来拆分每个TStringList项 因此,在第一个TStringList中,将有以下项目: " 0.985,EError can't find,E" "0,5186,Name,6946" " 0.985" "ERror can't find" "E" 然后,在第二个TStringLis

我需要使用
“|”
作为唯一的
分隔符,将以下字符串拆分为
TStringList

" 0.985,EError can't find,E| 0,5186,Name,6946"
然后我需要使用
,“
作为唯一的`分隔符来拆分每个
TStringList

因此,在第一个
TStringList
中,将有以下项目:

" 0.985,EError can't find,E"
"0,5186,Name,6946"
" 0.985"
"ERror can't find"
"E"
然后,在第二个
TStringList
中有以下项目:

" 0.985,EError can't find,E"
"0,5186,Name,6946"
" 0.985"
"ERror can't find"
"E"

我必须在没有新过程的情况下执行此操作。

您需要的是
StrictDelimiter
属性,它在Delphi 7中还不存在。如果没有
StrictDelimiter
属性,则无论
Delimiter
属性如何,属性setter都会将空格作为分隔符,并且您无法更改该行为。因此,您必须手动解析输入字符串

以下代码是从以后的Delphi版本中使用的
StrictDelimiter
逻辑派生出来的,在Delphi 7中运行良好:

uses
  SysUtils, Classes, Windows;

procedure SplitDelimitedText(const Value: string; List: TStrings; StrictDelimiter: Boolean = True);
var
  P, P1: PChar;
  S: string;
begin
  if not StrictDelimiter then
  begin
    List.DelimitedText := Value;
    Exit;
  end;

  List.BeginUpdate;
  try
    List.Clear;
    P := PChar(Value);
    while P^ <> #0 do
    begin
      if P^ = List.QuoteChar then
        S := AnsiExtractQuotedStr(P, List.QuoteChar)
      else
      begin
        P1 := P;
        while (P^ <> #0) and (P^ <> List.Delimiter) do
          P := CharNext(P);
        SetString(S, P1, P - P1);
      end;
      List.Add(S);

      if P^ = List.Delimiter then
      begin
        P1 := P;
        if CharNext(P1)^ = #0 then
          List.Add('');
        P := CharNext(P);
      end;
    end;
  finally
    List.EndUpdate;
  end;
end;

这个问题已经被问过很多次了。试试网络搜索。“我必须在没有新程序的情况下完成。”-这是什么要求?