utilizar uso separar que por palabras hace espacios caracter array delphi delphi-2010

delphi - uso - ¿Cómo dividir la secuencia por un delimitador de caracteres múltiples?



string split c# (5)

Hay otra solución bastante simple usando TStringList. Cambiar LineBreak:

procedure TForm208.Button1Click(Sender: TObject); var lst: TStringList; begin lst := TStringList.Create; try lst.LineBreak := ''<->''; lst.Text := ''Whale<->Mammal<->Ocean''; Memo1.Lines := lst; finally lst.Free; end; end;

¿Hay una función Delphi para dividir la cadena por un delimitador de múltiples caracteres en lugar de un solo carácter?

Por ejemplo, cuando usaría esa función de esta manera:

SplitString(''Whale<->Mammal<->Ocean'', ''<->'')

Me gustaría obtener un resultado de estas 3 cadenas:

''Whale'', ''Mammal'', ''Ocean''

¿Hay alguna función en Delphi para esto?


No existe tal función ''desde la caja''. Si sus cadenas contienen texto regular, puede utilizar StringReplace con un símbolo exótico; de lo contrario, no es difícil escribir su propia función dividida usando Pos o IdStrings.SplitString (si está disponible en D2010)

function SplitStringByStr(const S, StrDelimiter: string): TStringDynArray; var tmp: string; begin tmp := StringReplace(S, StrDelimiter, ''`'', [rfReplaceAll]); Result := SplitString(tmp, ''`''); end;


No sé si Delphi tiene un procedimiento de división estándar que utiliza una cadena como delimitador. Pero puede escribir el suyo ya sea que tenga o no:

procedure SplitStr(const Source, Delimiter: String; var DelimitedList: TStringList); var s: PChar; DelimiterIndex: Integer; Item: String; begin s:=PChar(Source); repeat DelimiterIndex:=Pos(Delimiter, s); if DelimiterIndex=0 then Break; Item:=Copy(s, 1, DelimiterIndex-1); DelimitedList.Add(Item); inc(s, DelimiterIndex + Length(Delimiter)-1); until DelimiterIndex = 0; DelimitedList.Add(s); end; procedure TForm1.Button1Click(Sender: TObject); var sl: TStringList; begin sl:=TStringList.Create; SplitStr(''delphi++split++string++'',''++'',sl); //do something with the list sl.Free; end;

Espero eso ayude..


Puede consultar mi unidad StringUtils.pas que es parte de la Biblioteca Cromis

Hay un tokenizador de texto simple allí. Pero probablemente es justo lo que necesitas. La interfaz es así

TTextTokenizer = class private FTokens: TTokens; FDelimiters: array of ustring; public constructor Create; procedure Tokenize(const Text: ustring); procedure AddDelimiters(const Delimiters: array of ustring); property Tokens: TTokens read FTokens; end;

Soporta cadenas como delimitadores y también más de un delimitador.


Si tiene JCL instalado, entonces en la unidad jclStrings hay StrToStrings procedimiento StrToStrings :

var sl: TStringList; begin sl := TStringList.Create; StrToStrings(''Whale<->Mammal<->Ocean'' , ''<->'' , sl);