Sei sulla pagina 1di 39

UNIVERSIDAD INCA GARCILASO DE LA VEGA

Facultad de Ingeniera de Sistemas, Computo y Telecomunicaciones

Asignatura
Lenguaje de Programacin I
Tema

Archivos

Profesor
Lic. Carlos A. Ruiz De La Cruz Melo
Correo: ruizdelacruzmel@uigv.edu.pe
ARCHIVOS
Hasta ahora un programa poda
almacenar informacin en la memoria
mediante las variables declaradas
MEMORIA
(tipos elementales, estructuras, tablas). SECUNDARIA
Este almacenamiento es temporal y
est limitado al tiempo de ejecucin
del programa. Archivo DIS
Cuando surge la necesidad de s CO
almacenar informacin de manera
permanente se deben usar ficheros. Un
fichero es una entidad que contiene
informacin de un conjunto de
elementos.

El fichero puede estar guardado en


algn medio de almacenamiento
secundario como por ejemplo disco
rgido, disckette, etc. La agrupacin de
CARACTERISTICAS

Existen algunas caractersticas a


sealar:

1. Un fichero se identifica por su nombre, el


cual generalmente est compuesto por:

Path: indica la ruta para encontrar el fichero


incluyendo la unidad de almacenamiento
donde se halla.
Nombre
Extensin: son tres caracteres que sirven
para identificar el tipo de fichero

Ejemplo:

"C:\Mis documentos\apuntes.doc"
CARACTERISTICAS
2. Registros

Un fichero puede estar compuesto por


registros, cada uno de los cuales contiene
informacin sobre un elemento.

Un registro puede ser un tipo simple o


compuesto
CARACTERISTICAS

3. Modo de acceso a los datos de


un fichero:

Secuencial: para acceder al


elemento i-simo se recorre
desde el primer elemento hasta
el elemento i-1.

Ejemplo: el almacenamiento
en una cinta es de acceso
secuencial.

Directo: para acceder al elemento
i-simo se hace directamente.

Ejemplo: el almacenamiento
en un disco es de acceso
TIPOS DE
ARCHIVOS
Almacena
caracteres ASCII
texto
Visible por un editor

Almacenamiento
en archivo Almacena en
hexadecimal
Binari No visible por
o cualquier editor
Dividido en
segmentos
TIPOS DE
ARCHIVOS
ffadfadfadfs
Estructura de un dfsdfsddsdfs Estructura
archivo binario dfsdfsdsdfsd de un
sdfffdfdfdfdf archivo de
dfdffdfdfdffd texto
EOF
dfffdf
REGISTRO 1
REGISTRO 2
Dividido en segmentos
: de igual tamao

REGISTRO N-1
REGISTRO N
Marca de fin de archivo
EOF (End of File)
OPERACIONES EN
ARCHIVOS

Existen operaciones que afectan a todo el


fichero, entre las cuales se enumeran:

Crear un fichero
Borrar un fichero
Ordenar un fichero segn algn criterio
de orden
Fusionar dos ficheros para formar un
tercer fichero
Dividir un fichero en dos o ms ficheros
OTRAS OPERACIONES
EN ARCHIVOS

Adems, existen otras operaciones que


afectan a uno o ms registros del fichero,
entre las cuales se enumeran: Alta de un
nuevo registro

Baja de un registro
Modificacin de uno o ms registros
Consulta de uno o m registros
ARCHIVOS EN C

Los archivos son estructuras de datos


almacenadas en memoria secundaria.

El formato de declaracin de un fichero es el


siguiente:

FILE * nombre_ var_fich;

En la operacin de apertura se puede


decidir si el fichero va a ser de texto o
binario, los primeros sirven para
almacenar caracteres, los segundos
para almacenar cualquier tipo de dato.
APERTURA DE
ARCHIVO
Antes de usar un fichero es
necesario realizar una operacin
de apertura del mismo.

posteriormente, si se desea
almacenar datos en l hay que
realizar una operacin de
escritura.

si se quiere obtener datos de l es


necesario hacer una operacin
de lectura.
APERTURA DE
ARCHIVO
Cuando ya no se quiera utilizar el fichero se
realiza una operacin de cierre del mismo
para liberar parte de la memoria principal que
pueda estar ocupando (aunque el fichero en s
est almacenado en memoria secundaria,
mientras est abierto ocupa tambin memoria
principal).

Cuando se termine el tratamiento del fichero


hay que cerrarlo; si la apertura se hizo con
fopen el cierre se har con fclose.

Para utilizar las instrucciones de manejo de


ficheros que veremos en este tema es necesario
incluir la librera <stdio.h>.
APERTURA DE
ARCHIVO
La instruccin ms habitual para abrir
un fichero es :

FILE * fichero;
fichero = fopen ( nombre-
fichero, modo);

La funcin fopen devuelve un puntero


a un fichero que se asigna a una
variable de tipo fichero. Si existe algn
tipo de error al realizar la operacin,
por ejemplo, porque se desee abrir para
leerlo y ste no exista, devuelve el
valor NULL.

El nombre-fichero ser una cadena de


caracteres que contenga el nombre (y
en su caso la ruta de acceso) del fichero
APERTURA DE
ARCHIVO
El modo es una cadena de caracteres que
indica el tipo del fichero (texto o binario) y el
uso que se va ha hacer de l lectura, escritura,
aadir datos al final, etc. Los modos disponibles
son:
modo descrpcion
r abre un fichero para lectura. Si el fichero no existe devuelve
error.
w abre un fichero para escritura. Si el fichero no existe se
crea, si el
fichero existe se destruye y se crea uno nuevo.
a abre un fichero para aadir datos al final del mismo. Si no
existe
se crea.
+ smbolo utilizado para abrir el fichero para lectura y
escritura.
b el fichero es de tipo binario.
APERTURA DE
ARCHIVO

Ejemplo

La forma habitual de utilizar la instruccin fopen es


dentro de una sentencia condicional que permita
conocer si se ha producido o no error en la apertura,
por ejemplo:

FlLE *fich;
if ((fich = fopen("nomfich.dat", "r")) == NULL){
/* control del error de apertura * /
cout<< " Error en la apertura \n ";
}
else {
// apertura correcta
}
ESCRITURA EN
ARCHIVO BINARIO
Para almacenar datos en un fichero es
necesario realizar una operacin de
escritura, de igual forma que para obtener
datos hay que efectuar una operacin de
lectura.

En C existen muchas y variadas


operaciones para leer y escribir en un
fichero; entre ellas tenemos: fread -fwrite,
fgetc -fputc, fgets -fputs, fscanf fprintf
.
Es aconsejable utilizarlas por parejas; es
decir, si se escribe con fwrite se debe leer
con fread.
ESCRITURA EN
ARCHIVO BINARIO

Para leer y escribir en ficheros que no


sean de texto las operaciones que se
deben utilizar son fread y fwrite.

El formato de escritura en bloque es el


siguiente:

fwrite (direcc_dato, tamao_dato, numero_datos, punt_fichero);


LECTURA EN ARCHIVO
BINARIO
La sentencia de lectura de bloque es la
siguiente:

fread (direcc_dato, tamao_dato, numero_datos,punt_fichero);

Lee tantos datos como indique numero de


datos del fichero, colocando los datos ledos a
partir de la direccin del dato.

Los datos tienen que tener tantos bytes como


especifique tamao del dato.
CIERRE DE ARCHIVO

Cuando se termine el tratamiento del fichero hay


que cerrarlo; si la apertura se hizo con fopen el
cierre se har con fclose.

Para utilizar las instrucciones de manejo de


ficheros que veremos en esta unidad es
necesario incluir la librera <stdio.h>.
EJEMPLO 1

Se creara un archivo
que permitir registrar
y mostrar los datos de
un archivo

Se creara un mtodo para


registrar los datos.

Tambin se creara un mtodo


para poder visualizar la
informacin.
EJEMPLO 1
Escritura en el archivo entero:

#include <conio.h>
Librera a
#include <iostream>
usar
#include <stdio.h>

using namespace std; Se abre el


archivo
FILE *f; entero en
void REGISTRAR(int x){ modo adicin
if((f=fopen(entero","ab"))==0){ cout<<"archivos on
problemas";getch(); }
else{
fwrite(&x, sizeof (int), 1, f ); Escritura
fclose(f); del valor x
}
}
Cierre del
archivo
EJEMPLO 1
Lectura en el archivo entero:

void MOSTRAR(){
int x;

if((f=fopen("entero","rb"))==0){ cout<<"archivos con


problemas";getch(); } Lectura
else { del
fread(&x, sizeof (int), 1, f); archivo
while(!feof(f)){ Se verifica
cout<<"\n"<<x; el final del
fread(&x, sizeof (int), 1, f); archivo
}
fclose(f);
}
}
EJEMPLO 1
Funcion principal:

int main(){
char op; int dato;
for(;;){
cout<<" \n adicionar <1>";
cout<<" \n Mostrar <2>";
cout<<" \n salir <3>";
op=getch();
switch(op){ Llamada
case '1':cout<<"\n Ing entero :";cin>>dato; al modulo
REGISTRAR(dato); REGISTRA
break; R
case '2':MOSTRAR();
getch(); break;
case '3':return 0; Llamada
} al modulo
} MOSTRAR
}
EJEMPLO 2

Se creara un archivo para


luego copiarlo en otro archivo
Para ello se creara un mtodo para
registrar los datos

Un mtodo para visualizar los datos


del archivo

Un mtodo para copiar los datos en


otro archivo
EJEMPLO 2
Se crea mtodo para registrar
los datos

#include <conio.h>
#include <iostream>
#include <stdio.h>

using namespace std;

FILE *f, *f1,*f2;


void REGISTRAR(char arch[],int x){
if((f=fopen(arch,"ab"))==0){ cout<<"archivos on
problemas";getch(); }
else{
fwrite(&x, sizeof (int), 1, f );
fclose(f);
}
}
EJEMPLO 2
Se crea mtodo para mostrar
los datos
void MOSTRAR(char arch[]){
int x;

if((f=fopen(arch,"rb"))==0){ cout<<"archivos con


problemas";getch(); }
else {
fread(&x, sizeof (int), 1, f);
while(!feof(f)){
cout<<"\n"<<x;
fread(&x, sizeof (int), 1, f);
}
fclose(f);
}
}
EJEMPLO 2
Se crea mtodo para copiar los
datos
void COPIAR(char a1[],char a2[]){
int y;
if((f1=fopen(a1,"rb"))==0){ cout<<"archivos con
problemas";getch(); }
else {
if((f2=fopen(a2,"wb"))==0){ cout<<"archivos on
problemas";getch(); }
else{
fread(&y, sizeof (int), 1, f1);
while(!feof(f1)){
fwrite(&y, sizeof (int), 1, f2 );
fread(&y, sizeof (int), 1, f1);
}
fclose(f1);
fclose(f2);
}
}
EJEMPLO 2
int main(){
Se crea el mtodo principalchar op; int dato;
for(;;){
cout<<" \n adicionar <1>";
cout<<" \n Mostrar <2>";
cout<<" \n Copiar <3>";
cout<<" \n salir <4>";
op=getch();
switch(op){
case '1':cout<<"\n Ing entero :";cin>>dato;
REGISTRAR("archivo1",dato); break;
case '2':cout<<"\n datos del archivo1\n";
MOSTRAR("archivo1");
cout<<"\n datos del archivo2\n";
MOSTRAR("archivo2");
break;
case '3':COPIAR("archivo1", "archivo2");
cout<<"\n SE realizo la copia con exito\n";
break;
case '4':return 0;
}
}
}
EJEMPLO 3

Se creara un archivo de
nmeros enteros para luego
separarlos en dos archivos,
uno de impares y otro de
pares.
Para ello se creara un mtodo para
registrar los datos

Un mtodo para visualizar los datos


del archivo

Un mtodo para separar los datos en


otro archivo
EJEMPLO 3
Se crea mtodo para registrar
los datos
#include <conio.h>
#include <iostream>
#include <stdio.h>

using namespace std;

FILE *f, *f1,*f2, *f3;


void REGISTRAR(char arch[],int x){
if((f=fopen(arch,"ab"))==0){ cout<<"archivos on
problemas";getch(); }
else{
fwrite(&x, sizeof (int), 1, f );
fclose(f);
}
}
EJEMPLO 3
Se crea mtodo para mostrar
los datos
void MOSTRAR(char arch[]){
int x;

if((f=fopen(arch,"rb"))==0){ cout<<"archivos con


problemas";getch(); }
else {
fread(&x, sizeof (int), 1, f);
while(!feof(f)){
cout<<"\n"<<x;
fread(&x, sizeof (int), 1, f);
}
fclose(f);
}
}
EJEMPLO 3
void SEPARAR(char a1[],char a2[],char a3[]){
int y;
Se crea un if((f1=fopen(a1,"rb"))==0){ cout<<"archivos con
mtodo para problemas";getch(); }
else {
separar los if((f2=fopen(a2,"wb"))==0){ cout<<"archivos on
datos problemas";getch(); }
else{
if((f3=fopen(a3,"wb"))==0){ cout<<"archivos on
problemas";getch(); }
else{
fread(&y, sizeof (int), 1, f1);
while(!feof(f1)){
if(y%2==0)
fwrite(&y, sizeof (int), 1, f2 );
else
fwrite(&y, sizeof (int), 1, f3 );
fread(&y, sizeof (int), 1, f1);
}
fclose(f1);
fclose(f2);
fclose(f3);
}
}
EJEMPLO 3 int main(){
char op; int dato;
for(;;){
cout<<" \n adicionar fila1 <1>";
Se crea el cout<<" \n Mostrar filas <2>";
cout<<" \n Separar filas <3>";
mtodo cout<<" \n salir <4>";
principal op=getch();
switch(op){
case '1':cout<<"\n Ing entero :";cin>>dato;
REGISTRAR("archivo1",dato);
break;
case '2':cout<<"\n datos del archivo1\n";
MOSTRAR("archivo1");
cout<<"\n datos del archivo2\n";
MOSTRAR("archivo2");
cout<<"\n datos del archivo3\n";
MOSTRAR("archivo3");
getch(); break;
case '3':SEPARAR("archivo1", "archivo2",
"archivo3");
cout<<"\n Se realizo la separacion
con exito\n";
break;
case '4':return 0;
}
}
REGISTRO Y CAMPO

DISCO
campos

CODIGO NOMBRE NOTA

registro
90021 Carlos Rojas Snchez 10
89765 Manuel Ventura Daz 11
78560 Ana Alvarado Glvez 15

s
EJEMPLO 4

Se creara un archivo de
registros compuestos.
Para ello se creara un mtodo para
registrar los datos

Un mtodo para visualizar los datos


del archivo
EJEMPLO 4 #include <iostream>
#include <stdio.h>
Se crea using namespace std;
struct ALUMNO{
mtodo para int codigo;
registrar los char nombre[100];
datos y float nota;
};
tambin la
estructura FILE *f;
para los void REGISTRAR(char arch[],ALUMNO x){
datos if((f=fopen(arch,"ab"))==0){ cout<<"archivos on
problemas";getch(); }
else{
fwrite(&x, sizeof (ALUMNO), 1, f );
fclose(f);
}
}
EJEMPLO 4
Se crea
mtodo para
visualizar los
datos void MOSTRAR(char arch[]){
ALUMNO x;

if((f=fopen(arch,"rb"))==0){ cout<<"archivos con


problemas";getch(); }
else {
fread(&x, sizeof (ALUMNO), 1, f);
while(!feof(f)){
cout<<"\n"<<x.codigo<<" "<<x.nombre<<"
"<<x.nota;
fread(&x, sizeof (ALUMNO), 1, f);
}
fclose(f);
}
}
EJEMPLO 4
Se crea el
mtodo int main(){
char op; int dato;
principal ALUMNO a;
for(;;){
cout<<" \n adicionar <1>";
cout<<" \n Mostrar <2>";
cout<<" \n salir <3>";
op=getch();
switch(op){
case '1':cout<<"\n Ing
codigo :";cin>>a.codigo;
cout<<"\n Ing
nombre :";cin>>a.nombre;
cout<<"\n Ing nota :";cin>>a.nota;
REGISTRAR("tad",a);break;
case '2':MOSTRAR("tad");getch(); break;
case '3':return 0;
}
}
EJERCICIOS
1. Escriba un programa que le permita colocar un valor que estaba al
final de un archivo, al inicio. Por ejemplo:

Entrada: 12, 4, 6, 2, 7
Salida: 7, 12, 4, 6, 2

2. Escriba un programa que le permita registrar nmeros reales en un


archivo y luego coloque en otro archivo los valores que tienen parte
decimal. Por ejemplo:

Entrada: 12.5, 23. 67, 7, 34. 33, 45, 8.2, 9, 4


Salida : 12.5, 23. 67, 34. 33, 8.2

3. Escriba un programa para un archivo que contiene nmeros enteros,


mostrar la informacin de la siguiente manera:

Entrada: 6, 7, 3, 4, 2
Salida: 6, 7, 3, 4, 2
6, 7, 3, 4
6, 7, 3
6, 7

Potrebbero piacerti anche