Hola.
Según entiendo, ya me dirán si me equivoco los que saben PHP, la función
explode, es mas poderosa que
ExtractStrings para este caso, ya que la primera admite como delimitador una cadena y la segunda sólo caracteres.
Como ya lo han expuesto claramente, la diferencia no es relevante en una variable que ha sido compuesta por caracteres y delimitadores:
Código Delphi
[-]
str:= '+ EBML head' + #$D#$A + '|+ EBML version: 1' + #$D#$A +
'|+ EBML read version: 1' + #$D#$A + '|+ EBML maximum ID length: 4' + #$D#$A;
Pero el caso es muy distinto si, la cadena es extraída
literalmente de un archivo y lo que eran caracteres de control pasan a ser texto plano. Por ejemplo el archivo cadena.txt con el contenido:
Cita:
+ EBML head'#$D#$A'|+ EBML version: 1'#$D#$A'|+ EBML read version: 1'#$D#$A'|+ EBML maximum ID length: 4'#$D#$A'
|
A diferencia de
explode, que por lo que leí no tendría inconveniente en manejar la situación, no hay manera de usar un delimitador como
'#$D#$A' con
ExtractStrings .
En este último caso habría que crear un procedimiento a tal fin:
Código Delphi
[-]
...
uses StrUtils;
procedure Explode(Str, SubStr: string; TS: TStrings);
var
p: Integer;
begin
SubStr:= QuotedStr(SubStr);
repeat
p:= PosEx(SubStr, Str, 1);
TS.Add(Copy(Str, 1, p-1));
Delete(Str, 1, (p-1)+Length(SubStr));
until Length(Str)=0;
end;
Llamada:
Código Delphi
[-]
procedure TForm1.btnExplodeClick(Sender: TObject);
begin
with TStringList.Create do
try
LoadFromFile('cadena.txt');
Explode(Text, '#$D#$A', Memo1.Lines);
finally
Free;
end;
end;
Quedo a la espera de que
pabloe9k, me disipe la duda del orígen de los datos...
Saludos