Hay muchas veces cuando necesitas dividir un cuerda en una formación de cadenas utilizando un carácter como separador. Por ejemplo, un archivo CSV (separado por "comas") podría tener una línea como "Zarko; Gajic;; DelphiGuide "y desea que esta línea se analice en 4 líneas (cadenas)" Zarko "," Gajic "," "(cadena vacía) y" DelphiGuide "utilizando el carácter de punto y coma"; "como delimitador.
Delphi proporciona varios métodos para analizar una cadena, pero es posible que ninguno haga exactamente lo que necesita. Por ejemplo, el método RTL ExtractStrings siempre usa comillas (simples o dobles) para delimitadores. Otro enfoque es usar elDelimitador yTexto delimitado propiedades de la clase TStrings, pero desafortunadamente, hay un error en la implementación ("dentro" de Delphi) donde el carácter de espacio siempre se usa como delimitador.
~~~~~~~~~~~~~~~~~~~~~~~~~
procedimiento ParseDelimited (const sl: TStrings; valor constante: cadena; delimitador const: string);
var
dx: entero;
ns: cadena;
txt: cadena;
delta: entero;
empezar
delta: = Longitud (delimitador);
txt: = valor + delimitador;
sl. BeginUpdate;
sl. Claro;
tratar
while Length (txt)> 0 do
empezar
dx: = Pos (delimitador, txt);
ns: = Copiar (txt, 0, dx-1);
sl. Agregar (ns);
txt: = Copiar (txt, dx + delta, MaxInt);
final;
finalmente
sl. EndUpdate;
final;
final;
~~~~~~~~~~~~~~~~~~~~~~~~~
Uso (rellena Memo1):
ParseDelimited (Memo1.lines, 'Zarko; Gajic;; DelphiGuide ','; ')