Programación I - Universidad Autónoma de Madrid

Anuncio
Contenidos
•
•
•
•
Programación I
Ficheros de texto
1
Ficheros
Lectura de ficheros de texto
Escritura de ficheros de texto
Aspectos avanzados
• Posicionamiento en un fichero
• Lectura de tokens de cadenas de caracteres
Iván Cantador
Escuela Politécnica Superior
Universidad Autónoma de Madrid
Programación I
Escuela Politécnica Superior
Universidad Autónoma de Madrid
Contenidos
•
•
•
•
2
Ficheros
Lectura de ficheros de texto
Escritura de ficheros de texto
Aspectos avanzados
• Posicionamiento en un fichero
• Lectura de tokens de cadenas de caracteres
Programación I
Escuela Politécnica Superior
Universidad Autónoma de Madrid
Ficheros (I)
3
• Un fichero o archivo es un conjunto de bits que es tratado
por el sistema operativo como única unidad lógica
• Un fichero está identificado por su nombre (en general, con
extensión) y por la ruta de la carpeta/directorio en el que se
encuentra
C:/Programacion1/Ejemplos/archivo.txt
• El tamaño de un fichero se expresa generalmente en Bytes
• Una carpeta o directorio es en realidad un fichero, cuya
finalidad es la de “almacenar” otras carpetas y ficheros
Programación I
Escuela Politécnica Superior
Universidad Autónoma de Madrid
Ficheros (II)
4
Ficheros (III)
• Desde un programa informático la lectura y escritura de
un fichero se realizan en 3 pasos:
• Existen 2 tipos de ficheros:
• Ficheros de texto (plano): contienen sólo líneas de texto sin
formato, sin otro tipo de datos (p.e. imágenes, gráficas, etc.)
‐ Con posibles codificaciones: ASCII, UTF‐8, EBCDIC …
‐ Normalmente asociados a la extensión .txt
• Ficheros binarios: contienen datos almacenados en un formato
arbitrario (generalmente asociado a una extensión concreta:
.doc, .pdf, .jpg, .mp3) representando todo tipo de medios: texto,
imagen, sonido, video
1. Apertura
2. Lectura/escritura
3. Cierre
• En programación, un fichero se suele representar
mediante una estructura, denominada “manejador”
(handler en inglés)
• En C, se usa el tipo de datos FILE, definido en <stdio.h>
• Entre otras cosas, contiene un puntero a la próxima
posición de lectura/escritura del fichero
Programación I
Escuela Politécnica Superior
Universidad Autónoma de Madrid
Ficheros (IV)
5
Programación I
Escuela Politécnica Superior
Universidad Autónoma de Madrid
6
Ficheros (V)
7
• Apertura de un fichero
• Apertura
FILE *fopen(char *rutaFichero, char *modoApertura)
• Lectura/cierre
int fscanf(FILE *fichero, char *formato, ... <variables> ...)
char *fgets(char *cadena, int numeroBytes, FILE *fichero)
int fprintf(FILE *fichero, char *formato, ... <variables> ...)
• Cierre
void fclose(FILE *fichero)
Programación I
Escuela Politécnica Superior
Universidad Autónoma de Madrid
FILE *fopen(char *rutaFichero, char *modoApertura)
• Modos de apertura principales
‐ "r": apertura del fichero en modo lectura
‐ "w": apertura del fichero en modo escritura ‐ sobreescritura;
si el fichero no existe, lo crea; si el fichero sí existe, escribe al
principio del mismo y eliminando el texto existente
‐ "a": apertura del fichero en modo escritura ‐ actualización; si
el fichero no existe, lo crea; si el fichero sí existe, escribe al
final del mismo sin eliminar el texto existente
Programación I
Escuela Politécnica Superior
Universidad Autónoma de Madrid
Contenidos
8
Lectura de ficheros de texto (I)
9
• Lectura de un fichero de texto: fscanf
int fscanf(FILE *fichero, char *formato, ... <variables> ...)
•
•
•
•
• Ejemplo: lectura de un fichero con una línea que contiene un
número entero, un número real, y una cadena de caracteres
separados por espacios en blanco
Ficheros
Lectura de ficheros de texto
Escritura de ficheros de texto
Aspectos avanzados
include <stdio.h>
void main() {
FILE *fichero = NULL;
int retorno, n;
double r;
char s[256];
• Posicionamiento en un fichero
• Lectura de tokens de cadenas de caracteres
fichero = fopen("C:/Programacion1/prueba.txt", "r");
if ( fichero ) {
retorno = fscanf(fichero, "%d %f %s\n", &n, &r, s);
if ( retorno == 3 ) printf("Leidos: %d %f %s\n", n, r, s);
fclose(fichero);
}
}
Programación I
Escuela Politécnica Superior
Universidad Autónoma de Madrid
Lectura de ficheros de texto (II)
Programación I
Escuela Politécnica Superior
Universidad Autónoma de Madrid
10
Contenidos
11
• Lectura de un fichero de texto: fscanf
int fscanf(FILE *fichero, char *formato, ... <variables> ...)
• Ejemplo: lectura de varias líneas de un fichero (con el formato
de línea del ejemplo anterior)
include <stdio.h>
void main() {
FILE *fichero = NULL;
int retorno, n;
double r;
char s[256];
fichero = fopen("C:/Programacion1/prueba.txt", "r");
if ( fichero ) {
// Mientras no sea fin de fichero, leemos linea
while ( !feof(fichero) ) {
retorno = fscanf(fichero, "%d %f %s\n", &n, &r, s);
if ( retorno == 3 ) printf("Leidos: %d %f %s\n", n, r, s);
}
fclose(fichero);
}
•
•
•
•
Ficheros
Lectura de ficheros de texto
Escritura de ficheros de texto
Aspectos avanzados
• Posicionamiento en un fichero
• Lectura de tokens de cadenas de caracteres
}
Programación I
Escuela Politécnica Superior
Universidad Autónoma de Madrid
Programación I
Escuela Politécnica Superior
Universidad Autónoma de Madrid
Escritura de ficheros de texto (I)
12
• Lectura de un fichero de texto: fprintf
Escritura de ficheros de texto (II)
• Lectura de un fichero de texto: fprintf
int fprintf(FILE *fichero, char *formato, ... <variables> ...)
int fprintf(FILE *fichero, char *formato, ... <variables> ...)
• Ejemplo: creación de un fichero con una línea que contiene un
número entero, un número real, y una cadena de caracteres
separados por espacios en blanco
• Ejemplo: actualización de un fichero añadiendo una línea que
contiene un número entero, un número real, y una cadena de
caracteres separados por espacios en blanco
include <stdio.h>
include <stdio.h>
void main() {
FILE *fichero = NULL;
int n = 10;
double r = 8.5;
char s[256] = "abcde";
void main() {
FILE *fichero = NULL;
int n = 10;
double r = 8.5;
char s[256] = "abcde";
// Abrimos el fichero en modo escritura - sobreescritura
fichero = fopen("C:/Programacion1/prueba.txt", "w");
// Abrimos el fichero en modo escritura - actualizacion
fichero = fopen("C:/Programacion1/prueba.txt", "a");
if ( fichero ) {
fprintf(fichero, "%d %f %s\n", n, r, s);
fclose(fichero);
}
if ( fichero ) {
fprintf(fichero, "%d %f %s\n", n, r, s);
fclose(fichero);
}
}
}
Programación I
Escuela Politécnica Superior
Universidad Autónoma de Madrid
Contenidos
Programación I
Escuela Politécnica Superior
Universidad Autónoma de Madrid
14
Posicionamiento en un fichero
• Posicionamiento en un fichero: fseek
fseek(<fichero>, <offset>, <origen>)
•
•
•
•
13
Ficheros
Lectura de ficheros de texto
Escritura de ficheros de texto
Aspectos avanzados
• Posicionamiento en un fichero
• Lectura de tokens de cadenas de caracteres
Programación I
Escuela Politécnica Superior
Universidad Autónoma de Madrid
fseek(f, 0L, SEEK_SET); // Al comienzo del fichero
fseek(f, 0L, SEEK_CUR); // En la posicion actual
fseek(f, 0L, SEEK_END); // Al final del fichero
fseek(f, 256L, SEEK_SET);
// En el Byte 256
• Funciones relacionadas
• ftell: devuelve la posición actual de lectura/escritura
• rewind: equivale a fseek(f, 0L, SEEK_SET)
Programación I
Escuela Politécnica Superior
Universidad Autónoma de Madrid
15
Contenidos
16
Lectura de tokens de cadenas de caracteres (I)
• La función strtok (de <string.h>
• “Tokeniza” (trocea) una cadena de caracteres atendiendo a un
conjunto de caracteres delimitadores
•
•
•
•
Ficheros
Lectura de ficheros de texto
Escritura de ficheros de texto
Aspectos avanzados
#include <stdio.h>
#include <string.h>
void main() {
char *cadena = "primero segundo, tercero\tcuarto";
char *delimitadores = " ,\t";
char *token = NULL;
printf("Tokens de %s:\n", cadena);
• Posicionamiento en un fichero
• Lectura de tokens de cadenas de caracteres
token = strtok(cadena, delimitadores);
while ( token ) {
printf("%s\n", token);
token = strtok(NULL, delimitadores);
}
}
Programación I
Escuela Politécnica Superior
Universidad Autónoma de Madrid
Lectura de tokens de cadenas de caracteres (II) 18
• La función strtok (de <string.h>
#include <stdio.h>
#include <string.h>
void main() {
FILE *fichero = NULL;
char linea[256]
char *delimitadores = " ,\t";
char *token = NULL;
fichero = fopen("C:/miFichero.txt", "r");
if ( fichero ) {
while ( !feof(fichero) ) {
fgets(linea, 256, fichero); // Leemos la proxima linea
// Leemos tokens de la linea
token = strtok(linea, delimitadores);
while ( token ) {
printf("%s\n", token);
token = strtok(NULL, delimitadores);
}
}
fclose(fichero);
}
}
Programación I
Escuela Politécnica Superior
Universidad Autónoma de Madrid
Programación I
Escuela Politécnica Superior
Universidad Autónoma de Madrid
17
Descargar