Pascal - Manejo de archivos
Pascal trata un archivo como una secuencia de componentes, que deben ser de tipo uniforme. El tipo de archivo está determinado por el tipo de componentes. El tipo de datos de archivo se define como:
type
file-name = file of base-type;
Donde, el tipo base indica el tipo de los componentes del archivo. El tipo base podría ser cualquier cosa como, entero, real, booleano, enumerado, subrango, registro, matrices y conjuntos, excepto otro tipo de archivo. Las variables de un tipo de archivo se crean usando la declaración var -
var
f1, f2,...: file-name;
A continuación se muestran algunos ejemplos de cómo definir algunos tipos de archivos y variables de archivos:
type
rfile = file of real;
ifile = file of integer;
bfile = file of boolean;
datafile = file of record
arrfile = file of array[1..4] of integer;
var
marks: arrfile;
studentdata: datafile;
rainfalldata: rfile;
tempdata: ifile;
choices: bfile;
Crear y escribir en un archivo
Escribamos un programa que cree un archivo de datos para los registros de los estudiantes. Crearía un archivo llamado Students.dat y escribiría los datos de un estudiante en él.
program DataFiles;
type
StudentRecord = Record
s_name: String;
s_addr: String;
s_batchcode: String;
end;
var
Student: StudentRecord;
f: file of StudentRecord;
begin
Assign(f,'students.dat');
Rewrite(f);
Student.s_name := 'John Smith';
Student.s_addr := 'United States of America';
Student.s_batchcode := 'Computer Science';
Write(f,Student);
Close(f);
end.
Cuando se compila y ejecuta, el programa crea un archivo llamado Students.dat en el directorio de trabajo. Puede abrir el archivo con un editor de texto, como un bloc de notas, para ver los datos de John Smith.
Leer de un archivo
Acabamos de crear y escribir en un archivo llamado Students.dat. Ahora, escriba un programa que lea los datos del estudiante del archivo:
program DataFiles;
type
StudentRecord = Record
s_name: String;
s_addr: String;
s_batchcode: String;
end;
var
Student: StudentRecord;
f: file of StudentRecord;
begin
assign(f, 'students.dat');
reset(f);
while not eof(f) do
begin
read(f,Student);
writeln('Name: ',Student.s_name);
writeln('Address: ',Student.s_addr);
writeln('Batch Code: ', Student.s_batchcode);
end;
close(f);
end.
Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:
Name: John Smith
Address: United States of America
Batch Code: Computer Science
Archivos como parámetro de subprograma
Pascal permite que las variables de archivo se utilicen como parámetros en subprogramas estándar y definidos por el usuario. El siguiente ejemplo ilustra este concepto. El programa crea un archivo llamado rain.txt y almacena algunos datos de lluvia. A continuación, abre el archivo, lee los datos y calcula la precipitación media.
Tenga en cuenta que, if you use a file parameter with subprograms, it must be declared as a var parameter.
program addFiledata;
const
MAX = 4;
type
raindata = file of real;
var
rainfile: raindata;
filename: string;
procedure writedata(var f: raindata);
var
data: real;
i: integer;
begin
rewrite(f, sizeof(data));
for i:=1 to MAX do
begin
writeln('Enter rainfall data: ');
readln(data);
write(f, data);
end;
close(f);
end;
procedure computeAverage(var x: raindata);
var
d, sum: real;
average: real;
begin
reset(x);
sum:= 0.0;
while not eof(x) do
begin
read(x, d);
sum := sum + d;
end;
average := sum/MAX;
close(x);
writeln('Average Rainfall: ', average:7:2);
end;
begin
writeln('Enter the File Name: ');
readln(filename);
assign(rainfile, filename);
writedata(rainfile);
computeAverage(rainfile);
end.
Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:
Enter the File Name:
rainfall.txt
Enter rainfall data:
34
Enter rainfall data:
45
Enter rainfall data:
56
Enter rainfall data:
78
Average Rainfall: 53.25
Archivos de texto
Un archivo de texto, en Pascal, consta de líneas de caracteres donde cada línea termina con un marcador de fin de línea. Puede declarar y definir archivos como:
type
file-name = text;
La diferencia entre un archivo normal de caracteres y un archivo de texto es que un archivo de texto se divide en líneas, cada una terminada por un marcador especial de final de línea, insertado automáticamente por el sistema. El siguiente ejemplo crea y escribe en un archivo de texto llamado contact.txt -
program exText;
var
filename, data: string;
myfile: text;
begin
writeln('Enter the file name: ');
readln(filename);
assign(myfile, filename);
rewrite(myfile);
writeln(myfile, 'Note to Students: ');
writeln(myfile, 'For details information on Pascal Programming');
writeln(myfile, 'Contact: Tutorials Point');
writeln('Completed writing');
close(myfile);
end.
Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:
Enter the file name:
contact.txt
Completed writing
Agregar a un archivo
Agregar a un archivo significa escribir en un archivo existente que ya tiene algunos datos sin sobrescribir el archivo. El siguiente programa ilustra esto:
program exAppendfile;
var
myfile: text;
info: string;
begin
assign(myfile, 'contact.txt');
append(myfile);
writeln('Contact Details');
writeln('[email protected]');
close(myfile);
(* let us read from this file *)
assign(myfile, 'contact.txt');
reset(myfile);
while not eof(myfile) do
begin
readln(myfile, info);
writeln(info);
end;
close(myfile);
end.
Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:
Contact Details
[email protected]
Note to Students:
For details information on Pascal Programming
Contact: Tutorials Point
Funciones de manejo de archivos
Free Pascal proporciona las siguientes funciones / procedimientos para el manejo de archivos:
No Señor. | Nombre y descripción de la función |
---|---|
1 | procedure Append(var t: Text); Abre un archivo en modo anexar |
2 | procedure Assign(out f: file; const Name:); Asigna un nombre a un archivo |
3 | procedure Assign(out f: file; p: PChar); Asigna un nombre a un archivo |
4 | procedure Assign(out f: file; c: Char); Asigna un nombre a un archivo |
5 | procedure Assign(out f: TypedFile; const Name:); Asigna un nombre a un archivo |
6 | procedure Assign(out f: TypedFile; p: PChar); Asigna un nombre a un archivo |
7 | procedure Assign(out f: TypedFile; c: Char); Asigna un nombre a un archivo |
8 | procedure Assign(out t: Text; const s:); Asigna un nombre a un archivo |
9 | procedure Assign(out t: Text; p: PChar); Asigna un nombre a un archivo |
10 | procedure Assign(out t: Text; c: Char); Asigna un nombre a un archivo |
11 | procedure BlockRead(var f: file; var Buf; count: Int64; var Result: Int64); Lee datos de un archivo a la memoria |
12 | procedure BlockRead(var f: file; var Buf; count: LongInt; var Result: LongInt); Lee datos de un archivo a la memoria |
13 | procedure BlockRead(var f: file; var Buf; count: Cardinal; var Result: Cardinal); Lee datos de un archivo a la memoria |
14 | procedure BlockRead(var f: file; var Buf; count: Word; var Result: Word); Lee datos de un archivo a la memoria |
15 | procedure BlockRead(var f: file; var Buf; count: Word; var Result: Integer); Lee datos de un archivo a la memoria |
dieciséis | procedure BlockRead(var f: file; var Buf; count: Int64); Lee datos de un archivo a la memoria |
17 | procedure BlockWrite(var f: file; const Buf; Count: Int64; var Result: Int64); Escribe datos de la memoria en un archivo |
18 | procedure BlockWrite(var f: file; const Buf; Count: LongInt; var Result: LongInt); Escribe datos de la memoria en un archivo |
19 | procedure BlockWrite(var f: file; const Buf; Count: Cardinal; var Result: Cardinal); Escribe datos de la memoria en un archivo |
20 | procedure BlockWrite(var f: file; const Buf; Count: Word; var Result: Word); Escribe datos de la memoria en un archivo |
21 | procedure BlockWrite(var f: file; const Buf; Count: Word; var Result: Integer); Escribe datos de la memoria en un archivo |
22 | procedure BlockWrite(var f: file; const Buf; Count: LongInt); Escribe datos de la memoria en un archivo |
23 | procedure Close(var f: file); Cierra un archivo |
24 | procedure Close(var t: Text); Cierra un archivo |
25 | function EOF(var f: file):Boolean; Comprueba el final del archivo |
26 | function EOF(var t: Text):Boolean; Comprueba el final del archivo |
27 | function EOF: Boolean; Comprueba el final del archivo |
28 | function EOLn(var t: Text):Boolean; Comprueba el final de la línea |
29 | function EOLn: Boolean; Comprueba el final de la línea |
30 | procedure Erase(var f: file); Elimina archivo del disco |
31 | procedure Erase(var t: Text); Elimina archivo del disco |
32 | function FilePos( var f: file):Int64; Posición en archivo |
33 | function FileSize(var f: file):Int64; Tamaño de archivo |
34 | procedure Flush(var t: Text); Escribe búferes de archivos en el disco |
35 | function IOResult: Word; Devuelve el resultado de la última operación de E / S del archivo |
36 | procedure Read(var F: Text; Args: Arguments); Lee de archivo a variable |
37 | procedure Read(Args: Arguments); Lee de archivo a variable |
38 | procedure ReadLn(var F: Text; Args: Arguments); Lee del archivo a la variable y pasa a la siguiente línea |
39 | procedure ReadLn(Args: Arguments); Lee del archivo a la variable y pasa a la siguiente línea |
40 | procedure Rename(var f: file; const s:); Cambia el nombre del archivo en el disco |
41 | procedure Rename(var f: file; p: PChar); Cambia el nombre del archivo en el disco |
42 | procedure Rename(var f: file; c: Char); Cambia el nombre del archivo en el disco |
43 | procedure Rename(var t: Text; const s); Cambiar el nombre del archivo en el disco |
44 | procedure Rename(var t: Text; p: PChar); Cambia el nombre del archivo en el disco |
45 | procedure Rename( var t: Text; c: Char); Cambia el nombre del archivo en el disco |
46 | procedure Reset(var f: file; l: LongInt); Abre archivo para lectura |
47 | procedure Reset(var f: file); Abre archivo para lectura |
48 | procedure Reset(var f: TypedFile); Abre archivo para lectura |
49 | procedure Reset(var t: Text); Abre archivo para lectura |
50 | procedure Rewrite(var f: file; l: LongInt); Abre archivo para escritura |
51 | procedure Rewrite(var f: file); Abre archivo para escritura |
52 | procedure Rewrite(var f: TypedFile); Abre archivo para escritura |
53 | procedure Rewrite(var t: Text); Abre archivo para escritura |
54 | procedure Seek(var f: file; Pos: Int64); Establece la posición del archivo |
55 | function SeekEOF(var t: Text):Boolean; Establece la posición del archivo al final del archivo |
56 | function SeekEOF: Boolean; Establece la posición del archivo al final del archivo |
57 | function SeekEOLn(var t: Text):Boolean; Establece la posición del archivo al final de la línea |
58 | function SeekEOLn: Boolean; Establece la posición del archivo al final de la línea |
59 | procedure SetTextBuf(var f: Text; var Buf); Establece el tamaño del búfer de archivo |
60 | procedure SetTextBuf(var f: Text; var Buf; Size: SizeInt); Establece el tamaño del búfer de archivo |
61 | procedure Truncate(var F: file); Truncar el archivo en la posición |
62 | procedure Write(Args: Arguments); Escribe variable en archivo |
63 | procedure Write(var F: Text; Args: Arguments); Escribir variable en archivo |
64 | procedure Writeln(Args: Arguments); Escribe una variable en un archivo y agrega una nueva línea |
sesenta y cinco | procedure WriteLn(var F: Text; Args: Arguments); Escribe una variable en un archivo y agrega una nueva línea |