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


9. ARCHIVOS.
9.2. CONCEPTOS TEÓRICOS SOBRE ARCHIVOS.
9. ARCHIVOS.
9.2. CONCEPTOS TEÓRICOS SOBRE ARCHIVOS.
9. ARCHIVOS.
9.2. CONCEPTOS TEÓRICOS SOBRE ARCHIVOS.

SIGUIENTE

SIGUIENTE

SIGUIENTE


‒ Conceptos teóricos sobre archivos.

Los archivos son una serie de dígitos binarios agrupados en bytes, asociados a un dispositivo. Estos dispositivos pueden ser un teclado, una pantalla, un modem, una unidad de almacenamiento, etc.

El acceso de un archivo depende del dispositivo que se usa y suele hacerse de dos maneras: secuencialmente y aleatoriamente. El acceso secuencial consiste en acceder a un determinado byte del archivo recorriendo todos los bytes anteriores hasta llegar al que se desea acceder, y el acceso aleatorio consiste en acceder a un determinado byte del archivo sin recorrer los bytes anteriores, con la ayuda de un puntero de archivo, este puntero se puede mover al final, al inicio de un archivo, o al byte o bloque de bytes que uno le indique.

El acceso secuencial es usado generalmente con dispositivos como el modem, teclado o pantalla, y el acceso aleatorio es usado con archivos almacenados en discos duros, memorias usb, etc. Los archivos de acceso secuencial o aleatorio suelen usar una marca de fin de archivo (EOF), que nos permite identificar el final del flujo de datos trasmitido a través del dispositivo.

El compilador FreePascal nos ofrece dos conjuntos de rutinas para el tratamiento de archivos, las rutinas tradicionales o estándar basado en la definición de los tipos de datos Text o File, y las que usan un manejador de archivos de tipo longword.

Cuando los archivos se asocian con una unidad de almacenamiento estos se acceden a través de un nombre, que los identifica y la codificación de caracteres usado en el nombre varía según el formato que tenga la unidad de almacenamiento, si la unidad de almacenamiento tiene un formato ntfs (Windows), los nombres de los archivos pueden usar codificación de caracteres UTF-16, en el caso de unidades con formato ext3 o ext4(Linux) se usa una codificación de caracteres utf8.

Las rutinas para el tratamiento de archivos que nos ofrece el compilador, nos permite usar nombres de archivos en ASCII sólo en los sistemas operativos Windows, pero en los sistemas operativos Linux se puede usar UTF8.

Se conocen como archivos de texto a los archivos que codifican sus bytes con una determinada codificación de caracteres, siendo los archivos de texto ASCII, UTF8 y UTF16 los más usados. El acceso a los archivos de texto es siempre secuencial, sin considerar el dispositivo al que este asociado, pero sin embargo cuando un archivo de texto está guardado en una unidad de almacenamiento se puede acceder a dicho archivo de manera aleatoria.

Cuando los archivos se asocian a un dispositivo que no sea una unidad de almacenamiento estos se identifican con un nombre que generalmente lo suministra el Sistema Operativo o en algunos casos lo suministra el compilador, en el caso de free pascal por ejemplo para identificar al teclado y pantalla (Consola), se usa la cadena de caracteres CON. El siguiente ejemplo nos muestra como asociar CON con un archivo, haciendo uso de las rutinas que usan un manejador de archivos.


Descargar
{$Codepage UTF8}
Uses Sysutils;
Var Arch:Longword;
    cad:ansistring;
Begin
  Arch:=FileOpen('CON',fmOpenRead);
  FileRead(Arch,cad[1],4); //Lee 4 bytes desde el teclado
  Fileclose(Arch);
  Arch:=FileOpen('CON',fmOpenWrite);
  FileWrite(Arch,cad[1],4);
  FileClose(Arch);
End.
Código fuente 1: Uso de CON.
Descargar

El programa lo que hace es leer desde el teclado 4 caracteres, y luego lo muestra por pantalla, usando directamente el teclado y el monitor como dispositivos, y la variable Arch es el manejado de archivo para el dispositivo CON. Como se puede observar la función fileopen, nos permite abrir y asociar un flujo de comunicación entre el archivo y el dispositivo, en este caso el archivo está asociado al dispositivo CON, que en este caso será secuencialmente ya que CON hace referencia al monitor y teclado de la computadora, para acceder al archivo se hace a través de la variable Arch, que es de tipo Longword. FileRead es el encargado de leer los bytes desde el archivo, fileread sólo leerá desde el teclado 4 bytes hasta que se presione enter, ignorando si se ingresan más de 4 bytes por teclado. FileWrite es el encargado de escribir los bytes al archivo, FileWrite escribe en el archivo sólo la cantidad de bytes indicados en el último parámetro que son 4 bytes. Al final de cada operación de lectura y escritura se cierra el flujo de comunicación entre el archivo y el programa con la rutina FileClose.

Dependiendo sobre cual microprocesador o CPU se esté trabajando, el programador tiene que considerar para variables de tamaño mayor a 1 byte, el orden en el cual los bytes son colocados en la memoria (RAM). Los dos modos que se usan para colocar los bytes en memoria son "Little Endian" y "Big Endian". "Little Endian" significa que el byte más a la izquierda según el orden de escritura, es colocado en memoria en una posición baja, y el byte más a la derecha es colocado en memoria en una posición alta. Por ejemplo el siguiente entero de tipo longint de 4 bytes: $5689BCF1 será colocado en memoria del siguiente modo:

Dirección de memoria Byte
Posición baja $00404590 --> F1
$00404591 --> BC
$00404592 --> 89
Posición alta $00404593 --> 56

"Big Endian" significa que el byte más a la izquierda es colocado en memoria en una posición alta, y el byte más a la derecha es colocado en memoria en una posición baja. Por ejemplo el siguiente entero de tipo longint de 4 bytes: $5689BCF1 será colocado en memoria del siguiente modo:

Dirección de memoria Byte
Posición baja $00404590 --> 56
$00404591 --> 89
$00404592 --> BC
Posición alta $00404593 --> F1

Al momento de colocar los bytes de la memoria RAM a un archivo, estos se colocan tal cual están, desde la memoria RAM al archivo respetando el modo en que se colocaron, que puede ser little endian o big endian, esto implica que si el archivo se creó en una computadora little endian y luego este archivo es abierto en una computadora big endian, entonces la interpretación de los bytes del archivo será incorrecta, porque los bytes estarán en orden inverso. Para evitar este tipo de problema, la solución es incluir dos bytes al inicio del archivo que servirá para saber cómo se colocaron los bytes en el archivo. Generalmente se usan los bytes $FFFE para indicar que se colocaron en little endian y $FEFF si se colocaron en big endian. Es bueno mencionar que también existen microprocesadores que usan los dos modos de almacenamiento en memoria.

El siguiente programa nos muestra como se almacena en memoria el número longint $5689BCF1, el resultado variara dependiendo donde se compile y ejecute el programa, a continuación el programa:


Descargar
{$codepage utf8}
Var n:longint;
    p:^byte;	
Begin
  n:=$5689BCF1; 
  p:=@n;
  Writeln('Direccion memoria      byte');
  Writeln(HexStr(longint(@p[0]),8),'               ',HexStr(p[0],2));
  Writeln(HexStr(longint(@p[1]),8),'               ',HexStr(p[1],2));
  Writeln(HexStr(longint(@p[2]),8),'               ',HexStr(p[2],2));
  Writeln(HexStr(longint(@p[3]),8),'               ',HexStr(p[3],2));
End.
Código fuente 2: Almacenamiento en memoria.
Descargar

Para saber si nuestra computadora usa little endian o big endian, se puede hacer el siguiente programa:


Descargar
{$codepage utf8}
 
function OrdenBytes:boolean;
  Var n:longint;
      p:^byte; 
  Begin
    n:=1;
    p:=@n;
    OrdenBytes:=false;
    if p[0]=1 then OrdenBytes:=true  
  End;
Begin
  if OrdenBytes then Writeln('Little Endian')
  else Writeln('Big Endian')
End.
Código fuente 3: Verificando si es Little Endian o Big Endian.
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.