Delphi : StringList Delimiter는 Delimiter가 설정되어 있어도 항상 공간 문자입니다.

StackOverflow https://stackoverflow.com/questions/1335027

문제

나는 tstringlist 클래스의 구분 기에 어려움을 겪고 있습니다. 구경하다:

var
  s: string;
  sl: TStringList;

begin
  sl := TStringList.Create;
  s := 'Users^foo bar^bar foo^foobar^barfoo';
  sl.Delimiter := '^';
  sl.DelimitedText := s;
  ShowMessage(sl[1]);
end;

sl[1] 돌아와야합니다 'foo bar'

sl[1] 돌아온다 'foo'

현재 구분표가있는 것 같습니다 '^' 그리고 ' '

어떤 아이디어?

도움이 되었습니까?

해결책

당신은 설정해야합니다 s1.StrictDelimiter := True 구분자로 간주되지 않는 공백의 경우 더 많은 정보 여기.

위의 지원을 지원하지 않는 버전으로 작업하므로 (답변이 제출 된 후 명확해진대로) 두 가지 옵션이 있습니다.

  1. 원본 텍스트 (예 : 밑줄)에서 사용되지 않는 캐릭터를 찾아서 분할하기 전에 모든 공백을 해당 문자로 변환 한 후 분할 후 다시 변환하십시오. 이것은 Robosoft제안.
  2. 텍스트에 반전 된 쉼표와 공간이없는 경우 사용할 수 있습니다. 알렉산더거꾸로 명령으로 구분자 사이에 텍스트를 랩핑하여 'hello hello^bye bye' 돌아옵니다 '"hello hello"^"bye bye"'. 이 경로를 선택하고 그것이 당신을 위해 작동한다면, Alexander의 답변을 받아들이고 내 것이 아니라, 그는 그것을 구현하기위한 코드도 제공합니다.

두 해결 방법은 사용하지 않습니다 StrictDelimiter 제한 사항이 있습니다 : 첫 번째는 사용하지 않은 문자가 필요하며 두 번째는 원본 텍스트에서 거꾸로 된 쉼표와 공간이 필요하지 않습니다.

아마도 새로운 버전의 델파이로 업그레이드 할 때가되었을 것입니다 :)

다른 팁

sl.DelimitedText := '"' + StringReplace(S, sl.Delimiter, '"' + sl.Delimiter + '"', [rfReplaceAll]) + '"';

Ryan은 Delphi의 ExtractStrings () 기능을 사용 하여이 문제에 대한 훌륭한 솔루션을 제공합니다. 보다:

Delimiter를 TSTRINGLIST에 사용하여 문자열을 구문 분석하는 것은 공백 (Delphi)을 구문 분석하는 것 같습니다.

따라서 귀하의 경우 전화를 SL.Delimiter 및 SL.DelimitedText로 바꾸십시오.ExtractStrings ([ '^'], [], pchar (s), sl);

sl.Text := StringReplace(S, sl.Delimiter, sLineBreak, [rfReplaceAll]);

일하는 것은 Delphi 7 "Like Like Gloves"에서 나에게 있습니다. 이것은 Alexander의 트릭을 적용한 후 내 기능입니다.

procedure Split (const Delimiter: Char; Input: string; const Strings: TStrings) ;
begin
   Assert(Assigned(Strings)) ;
   Strings.Clear;
   Strings.Delimiter := Delimiter;
   Strings.DelimitedText :=  '"' + StringReplace(Input, Delimiter, '"' + Delimiter + '"', [rfReplaceAll]) + '"' ;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Edit1.Text := 'Users^foo bar^bar foo^foobar^barfoo';
  Split('^',Edit1.Text,Memo1.Lines);
end;

정말 감사합니다!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top