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.5. GUARDAR Y ABRIR ARCHIVOS DE TEXTO CON TSTRINGLIST.
14. LISTA DE CADENAS TSTRINGLIST.
14.5. GUARDAR Y ABRIR ARCHIVOS DE TEXTO CON TSTRINGLIST.
14. LISTA DE CADENAS TSTRINGLIST.
14.5. GUARDAR Y ABRIR ARCHIVOS DE TEXTO CON TSTRINGLIST.

SIGUIENTE

SIGUIENTE

SIGUIENTE


‒ Guardar y abrir archivos de texto con TStringList.

La clase TStringList, tiene dos métodos que nos permiten guardar y abrir archivos de texto, para luego trabajarlos como una lista de cadena de caracteres.

Los métodos son LoadFromFile y SaveToFile, el primero se usa para cargar un archivo de texto en la clase y el otro para guardar todas las cadenas de caracteres en el archivo. Ambos métodos sólo tienen un parámetro el nombre del archivo. A diferencia de lo que se explico con archivos de texto en el capítulo 09-03, TStringList no tiene métodos para trabajar directamente con el archivo en disco, es decir para añadir una línea de texto al final de un archivo de texto, primero debemos cargar el archivo a TStringList con LoadFromFile, luego añadir la nueva línea con el método Add y finalmente guardarlo al disco con el método SaveToFile. Para trabajar directamente con archivos en el disco se pueden usar las rutinas y procedimientos explicados en el capítulo 09 o en su defecto usar la clase TFileStream. Ahora veamos un ejemplo de como guardar nuestra lista de caracteres en un archivo.


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

Var ListaCadenas:TStringList;

Begin

  ListaCadenas:=TStringList.create;

  //Si no se usa UTF8encode en alguna de las
  //líneas entonces el archivo
  //de texto tendrá caracteres mezclados de distintas codificaciones

  ListaCadenas.Add(UTF8encode('Primera Línea'));

  ListaCadenas.Add(UTF8encode('Segundo Línea'));
  ListaCadenas.Add(UTF8encode('①②③④⑤⑥⑦⑧⑨'));

  ListaCadenas.SaveToFile('demo.txt');
  Writeln(ListaCadenas.Text)
End.
Código fuente 21: Uso de SaveToFile.
Descargar

En este ejemplo se puede observar que se esta usando la función UTF8encode, como ya explique anteriormente esta función hará que la cadena de caracteres en UTF8 se expanda para colocarlos en la lista de cadena de caracteres. Recordemos que TStringList sólo almacena caracteres en código ANSI. Este programa funciona bien en ambos sistemas operativos Linux y Windows, pero en Linux podemos hacer uso de la unidad cwstring y así podemos evitar el uso de la función UTF8encode.


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

Var ListaCadenas:TStringList;

Begin

  ListaCadenas:=TStringList.create;

  ListaCadenas.Add('Primera Línea');

  ListaCadenas.Add('Segundo Línea');
  ListaCadenas.Add('①②③④⑤⑥⑦⑧⑨');

  ListaCadenas.SaveToFile('demo.txt');
  Writeln(ListaCadenas.Text)
End.
Código fuente 22: Uso de la unidad cwstring con TStringList en Linux.
Descargar

El siguiente ejemplo nos muestra como abrir y guardar un archivo de texto.


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

Var ListaCadenas:TStringList;

Begin

  ListaCadenas:=TStringList.create;

  ListaCadenas.Add('Primera Línea');

  ListaCadenas.Add('Segundo Línea');
  ListaCadenas.Add('①②③④⑤⑥⑦⑧⑨');

  ListaCadenas.SaveToFile('demo.txt');
  Writeln(ListaCadenas.Text);

  ListaCadenas.LoadFromFile('demo.txt');
  Writeln(ListaCadenas.Text)
End.
Código fuente 23: Uso de la LoadFromFile.
Descargar

Si deseamos añadir más cadena de caracteres a nuestro archivo de texto entonces debemos, como explique anteriormente abrir el archivo de texto, añadir o insertar la nueva cadena de caracteres y después guardarlo. Ejemplo:


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

Var ListaCadenas:TStringList;

Begin

  ListaCadenas:=TStringList.create;

  ListaCadenas.Add(UTF8encode('Primera Línea'));
  ListaCadenas.Add(UTF8encode('Segundo Línea'));
  ListaCadenas.Add(UTF8encode('①②③④⑤⑥⑦⑧⑨'));

  ListaCadenas.SaveToFile('demo.txt');
  Writeln(ListaCadenas.Text);

  ListaCadenas.LoadFromFile('demo.txt');
  Writeln(ListaCadenas.Text);

  ListaCadenas.Add(UTF8encode('Cuarta Línea'));
  ListaCadenas.SaveToFile('demo.txt');
  Writeln(ListaCadenas.Text);
End.
Código fuente 24: Añadiendo más cadenas de caracteres a un archivo de texto.
Descargar

Si se tiene una lista de cadena de caracteres en donde al menos una de ellas tenga asociado un objeto, el objeto no lo almacenará en disco, simplemente será ignorado.

Los métodos SaveToFile y LoadFromFile sólo permiten usar nombres de archivos en UTF8, en caso se use con Linux y en Ansi o ASCII si se usa con Windows. Windows es un sistema operativo que permite usar nombres de archivos en unicode, pero no usa UTF8 si no que usa UTF16. Si queremos guardar archivos de texto con nombres en UTF16 en Windows, debemos crear una clase que herede de TStringList los métodos y atributos que este tenga, para sobrecargar los métodos LoadFromFile y SaveToFile. Pero estos métodos deberán usar las rutinas de la API de Windows, mostradas en el capitulo 09-08. A continuación la nueva clase en la unidad MiLista.pp, al que la denomino TStringListWin con los métodos LoadFromFile y SaveToFile sobrecargados.


Descargar
{$codepage utf8}
{$mode objfpc}
Unit MiLista;
Interface
 Uses sysutils, classes, windows;
 Type TStringListWin=class(TStringList)
        public
          procedure SaveToFile(Arch:unicodestring);virtual; //sobrecargado
          procedure LoadFromFile(Arch:unicodestring);virtual; //sobrecargado
      End;

Implementation

  procedure TStringListWin.SaveToFile(Arch:unicodestring);
    var arch1:THandle;
    Begin
      Arch1:=CreateFileW(PWideChar(Arch),
             GENERIC_READ or GENERIC_WRITE,0,nil,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
      FileWrite(Arch1,Text[1],length(Text));
      FileClose(Arch1)
    End;

  procedure TStringListWin.LoadFromFile(Arch:unicodestring);
    var arch1:THandle;
        BytesEscritos:longint;
        aux:ansistring;
    Begin
      arch1:=CreateFileW(PWideChar(Arch),
             GENERIC_READ or GENERIC_WRITE,0,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
      BytesEscritos:=FileSeek(Arch1,0,fsFromend);
      FileSeek(Arch1,0,fsFromBeginning);
      setlength(aux,BytesEscritos);
      FileRead(Arch1,aux[1],BytesEscritos);
      Text:=aux;
      FileClose(Arch1)
    End;

End.
Código fuente 25: Unidad MiLista con la clase TStringListWin, con los métdos LoadFromFile y SaveToFile sobrecargados.
Descargar

En esta unidad se puede observar que se usa CreateFileW, que es la encargada de crear, cargar y guardar un archivo con nombre en UTF16, y también se usan las rutinas FileWrite, FileRead ya explicadas en el capítulo 09-06.

Lo que se debe hacer ahora es incluir nuestra unidad para usarlo en una aplicación en Windows y así poderlos guardar con nombres en UTF16. A continuación un ejemplo de su uso.


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

Var ListaCadenas:TStringListWin;

Begin

  ListaCadenas:=TStringListWin.create;

  ListaCadenas.Add(UTF8encode('Primera Línea'));
  ListaCadenas.Add(UTF8encode('Segundo Línea'));
  ListaCadenas.Add(UTF8encode('①②③④⑤⑥⑦⑧⑨'));

  ListaCadenas.SaveToFile('demo①②.txt');
  Writeln(ListaCadenas.Text);

  ListaCadenas.LoadFromFile('demo①②.txt');
  Writeln(ListaCadenas.Text);

  ListaCadenas.Add(UTF8encode('Cuarta Línea'));
  ListaCadenas.SaveToFile('demo①②.txt');
  Writeln(ListaCadenas.Text);
End.
Código fuente 26: Ejemplo del uso de la clase TStringListWin.
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.