BotonMenu
BotonIndice

Visita : conoce3000.com
Paypal : https://www.paypal.com/donate/?hosted_button_id=XY8TZ3MGN64GE

PASCAL CON FREE PASCAL

PASCAL CON FREE PASCAL

PASCAL CON FREE PASCAL


14. LISTA DE CADENAS TSTRINGLIST.
14.3. VALORES ASOCIADOS Y DELIMITADORES CON TSTRINGLIST.
14. LISTA DE CADENAS TSTRINGLIST.
14.3. VALORES ASOCIADOS Y DELIMITADORES CON TSTRINGLIST.
14. LISTA DE CADENAS TSTRINGLIST.
14.3. VALORES ASOCIADOS Y DELIMITADORES CON TSTRINGLIST.

SIGUIENTE

SIGUIENTE

SIGUIENTE


‒ Valores asociados y delimitadores con TStringList.

En otros lenguajes de programación como php, existen lo que se conoce como arreglos asociados, algo que no tiene free pascal. La clase TStringList nos permite hacer algo parecido que se conoce como valores asociados o que sirven para crear parejas de identificadores a los que se les asocia un valor. A esto se les conoce como pares nombre-valor o pares identificador-valor.

Un par nombre valor es una cadena de caracteres, en donde se escribe sin dejar espacios en blanco un identificador y su valor, separados por un símbolo de igual u otro que se especifique, pero generalmente se usa el símbolo igual. Aquí algunos ejemplos:

'nombre=Jorge'
'edad=45'
'estado=civil'
'Pi=3.1415'

Para añadir pares valor a un TString simplemente se puede usar el método Add, y para acceder a un valor por su identificador se usa la propiedad Values. También se puede obtener el identificador y el valor usando el índice de la lista con la ayuda de las propiedades names y ValueFromIndex.


Descargar
{$codepage utf8}
{$mode objfpc}
Uses sysutils, classes;

Var ListaCadenas:TStringList;
    cad:UnicodeString;
    i:integer;
Begin
  ListaCadenas:=TStringList.create;

  ListaCadenas.Add('Uno=1');
  ListaCadenas.Add('Dos=2');
  ListaCadenas.Add('Tres=3');
  Writeln('Mostrando las lista');
  for cad in ListaCadenas do Writeln(cad);

  Writeln('Mostrando el valor de UNO');
  Writeln(ListaCadenas.Values['Uno']);
  Writeln('Mostrando el valor de TRES');
  Writeln(ListaCadenas.Values['TRES']);

  Writeln('Mostrando sólo los valores');
  for i:=0 to ListaCadenas.Count-1 do
    Writeln(ListaCadenas.ValueFromIndex[i]);

  Writeln('Mostrando sólo los nombres o identificadores');
  for i:=0 to ListaCadenas.Count-1 do
    Writeln(ListaCadenas.names[i]);
End.
Código fuente 10: Valores asociados pares nombre-valor.
Descargar

Se puede usar la propiedad Text, para ingresar los pares nombre-valor, pero separando cada par con el carácter #10.


Descargar
{$codepage utf8}
{$mode objfpc}
Uses sysutils, classes;

Var ListaCadenas:TStringList;
    cad:UnicodeString;
    i:integer;
Begin
  ListaCadenas:=TStringList.create;
  ListaCadenas.Text:='Uno=1'+#10+'Dos=2'+#10+'Tres=3';

  Writeln('Mostrando las lista');
  for cad in ListaCadenas do Writeln(cad);

  Writeln('Mostrando el valor de UNO');
  Writeln(ListaCadenas.Values['Uno']);
  Writeln('Mostrando el valor de TRES');
  Writeln(ListaCadenas.Values['TRES']);

  Writeln('Mostrando sólo los valores');
  for i:=0 to ListaCadenas.Count-1 do
    Writeln(ListaCadenas.ValueFromIndex[i]);

  Writeln('Mostrando sólo los nombres o identificadores');
  for i:=0 to ListaCadenas.Count-1 do
    Writeln(ListaCadenas.names[i]);
End.
Código fuente 11: Valores asociados pares nombre-valor usando la propiedad Text.
Descargar

También se puede usar la propiedad CommaText, para ingresar los pares nombre-valor, pero en ves de usar el caracter #10 se usa la coma.


Descargar
{$codepage utf8}
{$mode objfpc}
Uses sysutils, classes;

Var ListaCadenas:TStringList;
    cad:UnicodeString;
    i:integer;
Begin
  ListaCadenas:=TStringList.create;
  ListaCadenas.CommaText:='Uno=1,Dos=2,Tres=3';

  Writeln('Mostrando las lista');
  for cad in ListaCadenas do Writeln(cad);

  Writeln('Mostrando el valor de UNO');
  Writeln(ListaCadenas.Values['Uno']);
  Writeln('Mostrando el valor de TRES');
  Writeln(ListaCadenas.Values['TRES']);

  Writeln('Mostrando sólo los valores');
  for i:=0 to ListaCadenas.Count-1 do
    Writeln(ListaCadenas.ValueFromIndex[i]);

  Writeln('Mostrando sólo los nombres o identificadores');
  for i:=0 to ListaCadenas.Count-1 do
    Writeln(ListaCadenas.names[i]);
End.
Código fuente 12: Valores asociados pares nombre-valor usando la propiedad CommaText.
Descargar

Los valores devueltos por las propiedades Values y ValueFromIndex, siempre son cadenas de caracteres, por lo que si necesitamos pasar estos valores, a variables de un tipo de dato entero o real, entonces necesitamos usar las funciones StrToInt y StrToFloat de la unidad sysutils, para convertir los valores almacenados.


Descargar
{$codepage utf8}
{$mode objfpc}
Uses sysutils, classes;

Var ListaEnteros:TStringList;
    ListaReales:TStringList;
    cad:UnicodeString;
    i:integer;
    j:double;
Begin
  ListaEnteros:=TStringList.create;
  ListaEnteros.CommaText:='num1=1,num2=2,num3=3';

  Writeln('Mostrando las lista');
  for cad in ListaEnteros do Writeln(cad);

  ListaReales:=TStringList.create;
  ListaReales.CommaText:='num1=1.5,num2=3.45,num3=3.89';
  Writeln('Mostrando las lista');
  for cad in ListaReales do Writeln(cad);

  Writeln('Asignando num1 de ListaEnteros a i');
  i:=StrToInt(ListaEnteros.Values['num1']);
  Writeln(i);

  Writeln('Asignando num3 de ListaReales a j');
  j:=StrToFloat(ListaEnteros.Values['num3']);
  Writeln(j:3:3)

End.
Código fuente 13: Uso de StrToInt y StrToFloat con valores asociados pares nombre-valor.
Descargar

Si se tiene una lista de cadenas de caracteres, mezclado en donde hay pares nombre-valor y cadenas de caracteres, la propiedad ValueFromIndex, devolverá la cadena de caracteres si el elemento de la lista es una cadena de caracteres, y devolverá el valor si es un par nombre-valor. En el caso de names, si el elemento de la lista es una cadena de caracteres devolverá una cadena de caracteres vacía y si es un par nombre-valor devolverá el nombre correspondiente.


Descargar
{$codepage utf8}
{$mode objfpc}
Uses sysutils, classes;

Var ListaCadenas:TStringList;
    i:integer;
Begin
  ListaCadenas:=TStringList.create;
  ListaCadenas.CommaText:='Uno=1,Dos=2,Tres=3';
  ListaCadenas.Add('Separador de la lista');
  ListaCadenas.AddText('Cuatro=4'+#10+'Cinco=5');

  Writeln('Mostrando los valores');
  for i:=0 to ListaCadenas.Count-1 do
    Writeln('[',i,']',ListaCadenas.ValueFromIndex[i]);

  Writeln('Mostrando los nombres o identificadores');
  for i:=0 to ListaCadenas.Count-1 do
    Writeln('[',i,']',ListaCadenas.names[i]);
End.
Código fuente 14: Lista de cadenas de caracteres con valores asociados pares nombre-valor y cadenas de caracteres.
Descargar

En este ejemplo también se puede observar el uso de AddText, para añadir más pares nombre-valor. No hemos usado CommaText o Text, ya que este reemplazaría todo el contenido del TStringList. Se conoce como delimitador al carácter que se suele usar para separar una cadena de caracteres en otras varias, generalmente el delimitador más usado es la coma. Anteriormente se uso la propiedad CommaText para introducir pares nombre-valor, pero su uso en realidad es para introducir cadenas de caracteres en la lista separados con una coma y espacios en blanco, es decir si hacemos lo siguiente:

Lista.CommaText:='Esto es la primera linea,Esto es la segunda linea'

Lo que hará la clase TStringList es separar la cadena de caracteres en la siguiente lista de cadenas de caracteres:

Esto
es
la
primera
linea
Esto
es
la
segunda
linea

Si queremos que CommaText ignore los espacios en blanco, entonces debemos ingresar nuestra cadena de caracteres encerrado entre comillas del siguiente modo:

Lista.CommaText:='"Esto es la primera linea","Esto es la segunda linea"'

Esto hará que la clase TStringList separe la cadena de caracteres en la siguiente lista de cadenas de caracteres:

Esto es la primera linea
Esto es la segunda linea

Descargar
{$codepage utf8}
{$mode objfpc}
Uses sysutils, classes;

Var ListaCadenas:TStringList;
Begin
  ListaCadenas:=TStringList.create;
  ListaCadenas.CommaText:='"Esto es la primera linea","Esto es la segunda linea"';
  Writeln('Mostrando las lista');
  Writeln(ListaCadenas.Text)
End.
Código fuente 15: Uso de las comillas en CommaText.
Descargar

Todo lo que esta encerrado entre comillas dobles no será separado en otra cadena de caracteres, incluso si se usan comas, pero si se necesita comillas dobles para encerrar una palabra, entonces se deben usar dos veces seguidas las comillas dobles, para que CommaText sólo consideré una dentro del texto encerrado con comillas dobles.


Descargar
{$codepage utf8}
{$mode objfpc}
Uses sysutils, classes
     {$ifdef Linux},cwstring{$endif};

Var ListaCadenas:TStringList;
Begin
  ListaCadenas:=TStringList.create;
  ListaCadenas.CommaText:='"Blanco ""Blanco""","El zorro, se escapó"';
  Writeln('Mostrando la lista');
  Writeln(ListaCadenas.Text)
End.
Código fuente 16: Uso de las comillas dobles en CommaText.
Descargar

Al igual que CommaText, existe DelimitedText su funcionamiento es similar a CommaText, pero podemos cambiar el delimitador. Es decir si en CommaText el delimitador que se usa para separar los cadenas de caracteres es la coma en DelimitedText podemos indicarle cuál será nuestro delimitador con el uso de la propiedad Delimiter y también podemos indicarle que caracter usar para no separar las cadenas de caracteres que tengan espacios en blanco, esto se hace con la propiedad QuoteChar.


Descargar
{$codepage utf8}
{$mode objfpc}
Uses sysutils, classes
{$ifdef Linux},cwstring{$endif};

Var ListaCadenas:TStringList;
Begin
  ListaCadenas:=TStringList.create;
  //Por defecto.
  //QuoteChar es una doble comilla y
  //Delimiter es la coma.
  ListaCadenas.DelimitedText:='"Blanco ""Blanco""","El zorro, se escapó"';
  Writeln('Mostrando la lista');
  Writeln('ListaCadenas.QuoteChar=',ListaCadenas.QuoteChar);
  Writeln('ListaCadenas.Delimiter=',ListaCadenas.Delimiter);
  Writeln(ListaCadenas.Text);

  ListaCadenas.QuoteChar:='|';
  ListaCadenas.Delimiter:='*';

  ListaCadenas.DelimitedText:='|Blanco "Blanco" |*|El zorro, se escapó|';
  Writeln('ListaCadenas.QuoteChar=',ListaCadenas.QuoteChar);
  Writeln('ListaCadenas.Delimiter=',ListaCadenas.Delimiter);
  Writeln(ListaCadenas.Text);

  ListaCadenas.QuoteChar:='|';
  ListaCadenas.Delimiter:=#10;

  ListaCadenas.DelimitedText:='|Blanco "Blanco" |'+#10+'|El zorro, se escapó|';
  Writeln('ListaCadenas.QuoteChar=',ListaCadenas.QuoteChar);
  Writeln('ListaCadenas.Delimiter=',ListaCadenas.Delimiter);
  Writeln(ListaCadenas.Text);

End.
Código fuente 17: Uso de DelimitedText y QuoteChar.
Descargar

Para terminar con este capítulo existen dos propiedades NameValueSeparator y StrictDelimiter, el primero se usa con pares nombre valor. NameValueSeparator nos permite especificar el caracter que deseamos usar para separar los pares nombre=valor, por defecto es el caracter igual. La segunda Propiedad es StrictDelimiter, y nos sirve para indicar que solamente el carácter que se usa como separador en DelimtedText o CommaText, sea el único que permitirá separar las cadenas de caracteres.


Descargar
{$codepage utf8}
{$mode objfpc}
Uses sysutils, classes
{$ifdef Linux},cwstring{$endif};

Var ListaCadenas:TStringList;
Begin
  ListaCadenas:=TStringList.create;

  ListaCadenas.Commatext:='Uno=1,Dos=2,Tres=3';
  Writeln('Mostrando el valor de UNO');
  Writeln(ListaCadenas.Values['Uno']);

  ListaCadenas.NameValueSeparator:=':';
  ListaCadenas.Commatext:='Uno:1,Dos:2,Tres:3';
  Writeln('Mostrando el valor de Tres');
  Writeln(ListaCadenas.Values['Tres']);

  Writeln('Con StrictDelimiter a false');
  ListaCadenas.DelimitedText:='Primera linea,Segunda linea, Tercera Linea';
  Writeln(ListaCadenas.Text);

  Writeln('Con StrictDelimiter a true');
  ListaCadenas.StrictDelimiter:=true;
  ListaCadenas.DelimitedText:='Primera linea,Segunda linea,Tercera Linea';
  Writeln(ListaCadenas.Text);

  ListaCadenas.CommaText:='Primera linea,Segunda linea,Tercera Linea';
  Writeln(ListaCadenas.Text)
End.
Código fuente 18: Uso de NameValueSeparator y StrictDelimiter.
Descargar




SIGUIENTE
SIGUIENTE
SIGUIENTE


 
‒ Comentarios y sugerencias.

Agradezco de antemano, todo comentario, sugerencia, y donativo a través de , que ayude a mejorar los contenidos educativos de Conoce 3000. Además, cualquier pregunta o duda que tengas lo puedes hacer por este medio. Pero, todo contenido que pueda resultar ofensivo, malicioso, racista, sexista, discriminatorio, obsceno, vulgar será eliminado. Para clases particulares contactame por whatsapp al 📲 (+51) 999 264 073








PORTADA |  INTERESANTE |  APUNTES |  LIBROS |  GALERIA


Creative Commons License


Todos los textos, imágenes y videos de Conoce3000 estan colocados bajo una licencia : Creative Commons Reconocimiento-NoComercial 3.0 Unported License.