Consejos

Cómo analizar una cadena delimitada en una lista de cadenas

Cómo analizar una cadena delimitada en una lista de cadenas


We are searching data for your request:

Forums and discussions:
Manuals and reference books:
Data from registers:
Wait the end of the search in all databases.
Upon completion, a link will appear to access the found materials.

Hay muchas veces cuando necesita dividir una cadena en una matriz 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" con 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.

La única solución para analizar una cadena delimitada es escribir un método propio:

Ejemplo de cadena delimitada

~~~~~~~~~~~~~~~~~~~~~~~~~
procedimiento ParseDelimited (const sl: TStrings; const value: string; const delimiter: string);
var
dx: entero;
ns: cadena;
txt: cadena;
delta: entero;
empezar
delta: = Longitud (delimitador);
txt: = valor + delimitador;
sl.BeginUpdate;
sl.Clear;
tratar
while Length (txt)> 0 do
empezar
dx: = Pos (delimitador, txt);
ns: = Copiar (txt, 0, dx-1);
sl.Add (ns);
txt: = Copiar (txt, dx + delta, MaxInt);
fin;
finalmente
sl.EndUpdate;
fin;
fin;
~~~~~~~~~~~~~~~~~~~~~~~~~

Uso (rellena Memo1):
ParseDelimited (Memo1.lines, 'Zarko; Gajic ;; DelphiGuide', ';')



Comentarios:

  1. Zulkilabar

    Creo que esta oración es brillante

  2. Emmanuele

    Lamento interferir, pero sugiero ir hacia el otro lado.

  3. Iven

    En todo personal enviar hoy?

  4. Edwald

    Interesante sitio, pero deberías agregar más información.

  5. Kagale

    tema cognitivo

  6. Lincoln

    Gracias por responder todas las preguntas. En realidad, aprendí muchas cosas nuevas. Es solo que no he descubierto qué y dónde final.

  7. Arashilrajas

    No puedo unirme a la discusión en este momento, muy ocupado. Pero Osvobozhus, necesariamente escribe lo que pienso.



Escribe un mensaje