tarea pagweb

40
Nombre de la Asignatura: Programación I Ejemplo de Pagina 1: Universidad Simón Bolívar Departamento de Computación CI2126 Computación II Gabriela Ochoa Lectura y Escritura en Archivos Secuenciales La clase de hoy cubre la creación, lectura y escritura de archivos. Adicionalmente veremos como pasar argumentos desde la línea de comandos al programa. Un aspecto importante de cualquier programa, es su habilidad de comunicarse con el mundo exterior. La lectura de archivos con datos de entrada, y la escritura de archivos de salida con los resultados, constituye una manera simple pero efectiva de comunicación. Funciones de Librería para la Entrada y Salida (E/S) de Archivos Existen rutinas para abrir y cerrar archivos, y para leer y escribir en ellos utilizando datos formateados, de manera similar a como se hace el formato de datos para entrada y salida en pantalla. La función fopen se utiliza para abrir un archivo, y asociarle una variable apuntador a archivo con la cual el programa puede referirse a la fuente del archivo. El prototipo de fopen es:

Upload: parra-patricia

Post on 25-May-2015

784 views

Category:

Education


1 download

DESCRIPTION

Ejemplos y analisis de paginas web

TRANSCRIPT

Page 1: Tarea pagweb

Nombre de la Asignatura: Programación I

Ejemplo de Pagina 1:

Universidad Simón Bolívar

Departamento de Computación

CI2126 Computación II

Gabriela Ochoa

Lectura y Escritura en Archivos Secuenciales

La clase de hoy cubre la creación, lectura y escritura de archivos. Adicionalmente veremos como pasar argumentos desde la línea de comandos al programa. Un aspecto importante de cualquier programa, es su habilidad de comunicarse con el mundo exterior. La lectura de archivos con datos de entrada, y la escritura de archivos de salida con los resultados, constituye una manera simple pero efectiva de comunicación.

Funciones de Librería para la Entrada y Salida (E/S) de Archivos

Existen rutinas para abrir y cerrar archivos, y para leer y escribir en ellos utilizando datos formateados, de manera similar a como se hace el formato de datos para entrada y salida en pantalla.

La función fopen se utiliza para abrir un archivo, y asociarle una variable apuntador a archivo con la cual el programa puede referirse a la fuente del archivo. El prototipo de fopen es:

FILE *fopen(const char *filename, const char *modo);

fopen retorna un apundador al archivo si la llamada fue exitosa, y si no, retorna NULL. El apuntador al archivo se utiliza para identificar la fuente del mismo, se pasa como parámetro a las rutinas de escritura, lectura y manejo del archivo. El filename y modo son cadenas de caracteres. Los modos válidos son:

Modo Uso

r Abre para lectura

w Abre o crea para escritura. Descarta (destruye) cualquier contenido previo

Page 2: Tarea pagweb

aAbre o crea para escritura. Agrega a (escribe después de) cualquier contenido previo

r+ Abre para modificaciones (lectura y escritura)

w+Abre o crea para modificación. Descarta (destruye) cualquier contenido previo

a+ Abre o crea para modificación. Agrega a cualquier contenido previo

Para declarar una variable de tipo apuntador a archivo:

#include <stdlib.h>

FILE *fp;

Ejemplo de apertura de un archivo:

fp = fopen("datos.txt","w");

La función fflush se usa para físicamente escribir (bajar) en el archivo cualquier data almacenada en el "buffer" intermedio. Para hacer los programas más eficientes y reducir las llamadas al sistema, los archivos mantienen un buffer (memoria) intermedia, una vez que el buffer está lleno, los datos se escriben en el archivo. La rutina fflush fuerza a que el buffer sea escrito en el archivo asociado. Su prototipo es:

int fflush(FILE *fp);

Recibe un apuntador a archivo como parámetro. Retorna cero si la llamada fue exitosa y EOF si no lo fue. EOF es una constante especial que denota que se ha llegado al final del archivo.

Para cerrar los archivos se utiliza la función fclose. Su prototipo es:

int fclose(FILE *fp);

Fclose retorna cero si fue exitosa y EOF si hubo alguna falla.

Para escribir datos en un archivo se utiliza la fprintf. Esta función es muy similar a printf, que ya sabemos manejar bien. La única diferencia es que fprintf tiene un argumento adicional, el apuntador a archivo que especifica la fuente donde queremos escribir. Su prototipo es:

int fprintf(FILE *fp, const char* format, ....);

fprintf retorna el número de caracteres que fueron escritos exitosamente o un número negativo en caso de falla.

Page 3: Tarea pagweb

Para leer datos de un archivo se utiliza la función fscanf. Esta función es muy similar a scanf, que ya sabemos manejar bien. La única diferencia es que fscanf tiene un argumento adicional, el apundador a archivo que especifica la fuente de donde queremos leer. Recuerden que los argumentos para guardar datos deben ser apuntadores (i.e, llevan & en caso de ser variables simples, y solo el nombre en caso de ser arreglos de caracteres). Su prototipo es:

int fscanf(FILE *stream, const char* format, ....);

Ejemplo

El siguiente programa abre un archivo que contiene un nombre y cedula de identidad. Luego abre un archivo de salida y escribe estos datos (pero en orden invertido). El archivo de entrada fue creado con un editor de texto.

Archivo de entrada: entrada.txt

Pedro 18878798

#include <stdio.h>

int main(){ char ifilename[] = "entrada.txt"; char ofilename[] = "salida.txt"; char name[30]; int idNum;

FILE *ofp, *ifp; /* Declara apuntadores a archivo */ ifp = fopen(ifilename,"r"); /* Abre archivo de entrada */ fscanf(ifp,"%s %d",name,&idNum); /* Lee datos de entrada */ ofp = fopen(ofilename,"w"); /* Abre archivo de salida */ fprintf(ofp,"%d %s\n",idNum, name); /* Escribe los datos */ fclose(ifp); fclose(ofp); /* Cierra los archivos */ return 0;} Archivo de salida: salida.txt

18878798 Pedro

Ejercicio de Practica

Extender el ejercicio anterior para que sea capaz de leer y escribir múltiples pares de nombres y cédulas. Sugerencia: Crear un ciclo y chequear cuando la rutina scanf retorna EOF.

Solucion:

#include <stdio.h>

Page 4: Tarea pagweb

int main(){

char ifilename[] = "c:/entrada.txt";

char ofilename[] = "c:/salida.txt";

char name[30];

int idNum;

FILE *ofp, *ifp;

ifp = fopen(ifilename,"r"); /* Abrir archivo entrada */

ofp = fopen(ofilename,"w"); /* Abrir archivo salida */

while (fscanf(ifp,"%s %d",name,&idNum) != EOF) {/*Leer datos */

fprintf(ofp,"%d %s\n",idNum, name); /* Escribir datos */

}

fclose(ifp); fclose(ofp); /* Cerrar archivos */

return 0;

}

Otras Rutinas Útiles

int fgetc(FILE *fp); Retorna el siguiente carácter del archivo referenciado por fp, o EOF si se ha llegado al final del archivo. El tipo de retorno es int en lugar de char, debido a que el carácter EOF debe ser manejado.

int *fgets(char *s, int n, FILE *fp); Retorna un apuntador a la cadena de caracteres leída si resulta exitoso, o NULL si se llega al final del archivo o si ocurre un error. La cadena es también almacenada en el arreglo de caracteres especificado como argumento. Un máximo de n-1 caracteres serán leídos. Lo cual da espacio para guardar el carácter de fin de cadena '\0'.

int fputs(const char s*, FILE *fp); Escribe una cadena de caracteres en el archivo, retorna EOF si hubo alguna falla.

int fputc(int c, FILE *fp); Escribe un carácter solo en el archivo, si hubo algún problema devuelve EOF.

Page 5: Tarea pagweb

int sprintf(char *buffer, const char *format, ...); Esta función es similar a fprintf, excepto que los datos son escritos en un arreglo (o buffer) de caracteres en lugar de en un archivo de salida.

int sscanf(char *buffer, const char *format, ...); Esta función es similar a fscanf, excepto que los datos son leídos de un arreglo (o buffer) de caracteres en lugar de un archivo de entrada.

Argumentos de Línea de Comando

C provee un mecanismo para pasar argumentos desde la línea de comandos al programa que se va a ejecutar. Cuando el programa comienza su ejecución, la rutina main es llamada con dos argumentos: un contador y un apuntador a un arreglo de cadenas de caracteres. El contador es llamado por convención argc y el apuntador argv. El uso de argv es un poco truculento. Dado que argv es un apuntador a un arreglo de cadenas de caracteres, la primera cadena de caracteres es referenciada por argv[0] (o *argv). La segunda cadena es referenciada por argv[1] (o *(argv + 1)), la tercera por argv[2], y así sucesivamente. La primera cadena de caracteres, argv[0], contiene el nombre del programa. Los argumentos comienzan realmente con argv[1].

Un ejemplo de llamada de un programa llamado copia, que copie un archivo en otro archivo seria: copia fuente.txt destino.txt. Esto es, el nombre del programa más dos argumentos que corresponderían a los nombres de los archivos fuente y destino.

Veamos un ejemplo que simplemente muestra los argumentos de un programa.

#include <stdio.h>

int main(int argc, char *argv[]){ int i; fprintf("The number of command line arguments is %d\n", argc); fprintf("The program name is %s\n",argv[0]); for (i = 1; i < argc; i++) { fprintf("%s",argv[i]); } fprintf("\n"); return 0;}

Referencias

Tutorial de Programación en C , conciso y bien escrito, con enlaces a muchos otros recursos para la programación en C y C ++.

Ir a Pagina del Curso

Page 6: Tarea pagweb

Aspectos Generales:

URL:http://www.ldc.usb.ve/~gabro/teaching/CI2126/Clase2_Archivos.htm

Utilización en el Aula:

Tipología: La Universidad Simón Bolívar, Departamento de Computación,

por :Gabriela Ochoa. No especifica su cargo o grado de Instrucción.

Destinatario: La página fue pensada para ser usada por alumnos de niveles

avanzados, especialistas e investigadores.

Nivel: usuarios de superior, o profesional.

Actividades: El sitio no incluye actividades para realizar con los alumnos.

La página pertenece a la Universidad Simón Bolívar destinada al área educativa tecnológica.

La página es no es de tipo portal ya que no cuenta con diversos recursos y herramientas que permiten la interacción, descarga de materiales y suscripción a revistas. Está destinada principalmente a profesionales de la educación, siendo el nivel académico de sus contenidos en el área de educación profesional o superior. La página se encuentra en Venezuela.

Aspectos Curriculares:

Interés para el Profesorado: la página sirve solo para uso del docente.

La página no permite descarga de materiales, libros digitales y pero si hay vínculos hacia otras páginas.

Aspectos Gráficos:

El entorno estático está diseñado con una fuente de tamaño muy pequeño lo cual puede dificultar su lectura, los colores son suaves lo cual hace agradable la interfaz y no posee imágenes.

En relación al entorno dinámico, posee ningún elemento animado.

Page 7: Tarea pagweb

No tiene elementos multimedia, tales como videos, archivos de imágenes o sonidos.

Aspectos Técnicos:

Libertad de Acceso: El acceso a la página es gratis y los usuarios no pueden

suscribir a un envío de noticias vía correo electrónico para enterarse de las novedades de

allí descritas.

Publicidad: no cuenta con enlaces a cursos pagos y promoción de eventos ni posee

spam de publicidad.

Navegabilidad: si posee hipervínculos o enlaces dentro de la página. La

navegabilidad en la página se hace ligera y no tarda en cargar , los vínculos no todos están

correctamente activos.

Interactividad : No posee, foros, chat, envío de mensajes, o cuestionarios. No cuenta con un blog y correo de contacto.

Conclusión:

La página no se adapta a los requerimientos académicos de la asignatura por lo que no será utilizada como material de consulta para mis estudiantes. Solo como material de apoyo docente.

Page 8: Tarea pagweb

Ejemplo 2:

Versión 3.0

800x600 mínimo

En esta lección:

Escritura-----Abrir un archivo-----Cerrar un archivo-----Concatenar datos-----Lectura-----Leer una palabra-----Leer una línea-----Asignación especial-----

Otras secciones:

Conceptos básicos-----Programando en C-----Programando en C++-----Programando Windows 9x.-----Teoría electrónica-----Circuitos electrónicos-----Actividades adicionales-----Hipervínculos-----

Contácteme:

Dudas y

Escritura de un archivo

A lo largo de ésta lección veremos la mecánica necesaria para escribir y leer datos a un

archivo, empezaremos con la escritura. Como siempre, los códigos especifican en primer

lugar algunas sentencias #include, y en el caso concreto del primer código de ejemplo

se ha declarado un nuevo tipo de variable. Estudie el siguiente código:

#include <stdio.h>#include <string.h>

int main(){ FILE *fp;

fp = fopen("prueba.htm", "w"); /* Abrir archivo para escritura */ fprintf(fp, "<HTML> \n"); fprintf(fp, "<BODY> \n"); fprintf(fp, "Esta es la primera linea de texto. \n"); fprintf(fp, "<CENTER>Esta es la segunda" "linea</CENTER> \n"); fprintf(fp, "Y esta es la <B>tercera linea" "de texto.</B> \n");

fclose(fp); /* Cerrar el archivo antes de terminar el programa */ printf("Se ha creado el archivo: prueba.htm \n");

return 0;}El tipo FILE es una estructura (misma que estudiaremos en la siguiente lección) que está

definida en el archivo de cabecera stdio.h, se usa para definir un puntero que se utilizará

en operaciones con archivos. Por definición, C requiere para accesar a un archivo de un

Page 9: Tarea pagweb

comentarios-----

puntero de tipo FILE, como es normal, se puede utilizar cualquier nombre para

representar dicho puntero, es común utilizar fp, así que éste nombre utilizamos en

el primer código.

Cómo abrir un archivo

Antes de poder escribir datos en un archivo, debemos abrirlo, esto significa que debemos

decirle al sistema que deseamos escribir en un archivo especificando el nombre del mismo

, para esto utilizamos la función fopen ( ), especificada en la línea 8 del código. El

puntero de archivo, fp en éste caso, señala a la estructura para el archivo siendo

necesarios dos argumentos para ésta función, el nombre del archivo en primer lugar, y el

atributo del archivo. El nombre del archivo es cualquier nombre válido para su sistema

operativo y puede ser expresado sea en minúsculas ó mayúsculas, incluso si así lo desea,

como una combinación de ámbas, el nombre se encierra entre comillas. En el ejemplo

escogí el nombre prueba.htm. Es importante que en el directorio donde trabaje éstos

ejemplos no exista un archivo con éste nombre pues al ejecutar el programa se sustituirán

los datos del mismo, en caso de no existir un archivo con el nombre especificado, el

programa lo creará.

Lectura ("r")

El segundo parámetro es el atributo del archivo y puede ser cualquiera de éstas tres letras

, "r", "w", ó "a", y deben estar en letra minúscula. Existen atributos adicionales en C que

permiten operaciones de Entrada/Salida (E/S) más flexibles por lo que es recomendable la

consulta de la documentación del compilador. Cuando se utiliza "r" el archivo se abre para

operaciones de lectura, para operaciones de escritura utilizamos "w" y cuando se

especifica "a" es porque deseamos agregar datos adicionales a los ya existentes en el

archivo, o sea concatenar datos. Abrir un archivo para lectura implica la existencia del

Page 10: Tarea pagweb

mismo, si ésta condición no es válida el puntero de archivo será igual a NULL y ésto puede

ser verificado utilizando el siguiente código:

if (fp==NULL){ printf("Error al abrir el archivo \n"); exit (1);}Es una buena práctica de programación checar todos los punteros de archivo en una

forma similar al código de arriba, el valor de 1 utilizado como parámetro de exit ( ) será explicado más adelante.

Escritura ("w")

Cuando un archivo se abre para operaciones de escritura, si éste no existe entonces será

creado, y si existe será reescrito dando como resultado la pérdida de los datos existentes

en el archivo previo. Si ocurre por alguna razón un error al abrir el archivo, el puntero de

archivo retorna un valor de NULL que puede ser checado como se especificó arriba.

Concatenar ("a")

Cuando un archivo se abre para concatenar datos, si no existe será creado inicialmente

vacío. Si el archivo existe, el punto de entrada de datos se situa al final de los datos

existentes en el archivo, de ésta manera es como se agregan nuevos datos al archivo.

El puntero de archivo se puede verificar como yá se explicó.

Salida al archivo

La salida de datos hacia un archivo es prácticamente idéntica a la forma en que

desplegamos datos en el dispositivo estándar de salida, las únicas diferencias reales son

el nombre de una nueva función y la adición del puntero de archivo como uno de los

argumentos de la función. En el código de ejemplo, la función fprintf ( ) reemplaza a la

familiar printf ( ) y el puntero de archivo vá como argumento dentro del paréntesis de la

Page 11: Tarea pagweb

función, como se aprecia en las líneas 9 a la 13 del código de ejemplo.

Cerrando el archivo

Para cerrar un archivo se utiliza la función fclose ( ) con el puntero de archivo dentro del

paréntesis. En algunos programas sencillos no es necesario cerrar el archivo ya que el

sistema operativo se encarga de cerrar los archivos que hayan quedado abiertos antes de

retornar el control al usuario, sin embargo es buena práctica cerrar en código todo aquel

archivo que se abra.

Compile y ejecute el programa, la única salida que verá en pantalla es la línea que indica

la creación del archivo especificado, después de correr el programa verifique en su

directorio de trabajo la existencia del archivo prueba.htm. Por la extensión utilizada es

fácil suponer que se trata de un pequeño archivo web, su navegador lo puede visualizar

de la forma convencional, pero también puede abrir éste archivo con un editor de texto

común (como Notepad), entonces se dará cuenta que el código HTML está inconcluso,este

"problemita" lo resolveremos más adelante por lo que le recomiendo que conserve éste

archivo pues se utilizará en las prácticas que siguen.

Volver al principio

Concatenar datos

Como vimos en el programa anterior, el archivo generado llamado prueba.htm está

Inconcluso así que es hora de corregir ésta situación, lo haremos utilizando el código que

Sigue el cual hace uso del atributo para concatenar datos y además utilizaremos una

nueva función para escribir en el archivo un solo dato a la vez:

#include <stdio.h>#include <string.h>

Page 12: Tarea pagweb

#include <stdlib.h>

int main(){ FILE *final;

final = fopen("Prueba.htm", "a"); /* Abrir archivo para concatenar */ if (final == NULL) { printf("Falla al abrir el archivo \n"); exit (EXIT_FAILURE); }

putc('\n', final); putc('<', final); putc('/', final); putc('B', final); putc('O', final); putc('D', final); putc('Y', final); putc('>', final); putc('\n', final); putc('<', final); putc('/', final); putc('H', final); putc('T', final); putc('M', final); putc('L', final); putc('>', final); putc('\n', final);

fclose(final);

return EXIT_SUCCESS;}En primer lugar observe que en este programa se efectúa la verificación del éxito al abrir

el archivo, la constante llamada EXIT_FAILURE está definida en el archivo de cabecera

stdlib.h generalmente con el valor de 1. La constante llamada EXIT_SUCESS a su vez

está definida generalmente con el valor de 0. El sistema operativo puede utilizar el valor

retornado para determinar si el programa está operando normalmente ó si es necesario

tomar alguna acción correctiva, por ejemplo, si un programa se ejecuta en dos partes y

la primera de ellas retorna un valor de error, entonces no hay necesidad de ejecutar la

segunda parte del programa.

La función putc ( )

Page 13: Tarea pagweb

La parte del programa que nos interesa es la función llamada putc ( ) ejemplificada de la

línea 16 a la 32, ésta función extrae al archivo un carácter a la vez, el caracter en

cuestión es el primer argumento de la función y el puntero de archivo el segundo y

último argumento dentro del paréntesis. Observe que para especificar un caracter

determinado se utiliza la comilla sencilla, incluyendo el caso del caracter de retorno de

carro '\n'. Compile y ejecute el programa. Antes de correr el programa asegurese de la

existencia del archivo prueba.htm en su directorio de trabajo, generado en el programa

anterior, después de correr el programa, abra el archivo con un editor de texto y

observe que ahora el documento web está completo.

Volver al principio

Lectura de un archivo

Como ya tenemos un archivo para leer podemos utilizar un nuevo programa, como en los

Programas anteriores, éste empieza con algunas declaraciones y abriendo el archivo

prueba.htm especificando que deseamos efectuar operaciones de lectura mediante el

atributo "r", el programa ejecuta un bucle do while para leer del archivo un solo carácter

a la vez y desplegarlo en pantalla hasta detectar un caracter EOF (End Of File, Fin de

Archivo). Por último cerramos el archivo y el programa termina.

#include <stdio.h>#include <stdlib.h>

int main(){ FILE *nombre; int c;

nombre = fopen("Prueba.htm", "r");

Page 14: Tarea pagweb

if (nombre == NULL) { printf("El archivo no existe \n"); exit (EXIT_FAILURE); } else { do { c = getc(nombre); /* Obtiene un caracter del archivo */ putchar(c); /* Lo despliega en pantalla y continua... */ } while (c != EOF); /* hasta encontrar EOF (el final del archivo)*/ } fclose(nombre);

return EXIT_SUCCESS;}En este punto afrontamos un problema común en programación C. La variable regresada

por la función getc ( ) es un caracter, por lo que podemos utilizar para el propósito una

variable de tipo char, el problema empieza si tratamos de utilizar una variable de tipo

unsigned char, ya que C regresa -1 para EOF. Una variable de tipo unsigned char no

puede contener valores negativos ya que su rango está entre 0 y 255 por lo que

retornará 255 para un valor negativo valor que no compara con EOF, en este caso el

programa nunca terminará. Para prevenir esta situación, utilice una variable de tipo int,

ya que este tipo de variable siempre incluye el signo. En este programa leimos del archivo

un caracter a la vez, en el siguiente leeremos una palabra a la vez.

Lectura de una palabra

El siguiente programa es prácticamente igual que el anterior excepto que ésta vez se

utiliza la función fscanf ( ) para leer una cadena a la vez, como fscanf ( ) detiene la

lectura de caracteres al encontrar un caracter de espacio ó uno de nueva línea, lee por lo

tanto una palabra a la vez desplegando los resultados en una palabra por línea, el nuevo

código es:

#include <stdio.h>

Page 15: Tarea pagweb

int main(){ FILE *fp1; char palabra[100]; int c;

fp1 = fopen("Prueba.htm", "r");

do { /* Obtiene una palabra del archivo */ c = fscanf(fp1, "%s", palabra); printf("%s\n", palabra); /* la despliega en pantalla */ } while (c != EOF); /* Se repite hasta encontrar EOF */

fclose(fp1);

return 0;}Al ejecutar éste programa la salida es la siguiente:

El problema es que se imprime dos veces la última palabra, para resolver este detalle

modificamos el anterior código así:

#include <stdio.h>

Page 16: Tarea pagweb

int main(){ FILE *fp1; char palabra[100]; int c;

fp1 = fopen("Prueba.htm", "r");

do { /* Obtiene una palabra del archivo */ c = fscanf(fp1, "%s", palabra); if (c != EOF) printf("%s\n", palabra); /* La despliega en pantalla */ } while (c != EOF); /* Se repite hasta encontrar EOF */

fclose(fp1);

return 0;}Es bueno hacer notar que un programador experimentado no escribiría el código como lo

hicimos en el ejemplo ya que compara c con EOF dos veces por cada ciclo del bucle y esto

es ineficiente. Utilizamos código que trabaja y es fácil de leer pero conforme usted

gane experiencia en C, Usted utilizará métodos más eficientes de codificar, aunque sean

más difíciles de leer, por ejemplo:

while((c = fscanf(fp1, "%s", palabra) != EOF){ printf("%s\n", palabra);}Lectura de una línea

Siguiendo la misma secuencia de los ejemplos de éste capítulo, analizaremos la forma de

leer una línea completa de texto, para esto tenemos el código que detallo enseguida:

#include <stdio.h>#include <stdlib.h>

int main(){ FILE *fp1; char palabra[100]; char *c;

Page 17: Tarea pagweb

fp1 = fopen("Prueba.htm", "r"); if (fp1 == NULL) { printf("Error al abrir el archivo \n"); exit (EXIT_FAILURE); }

do { c = fgets(palabra, 100, fp1); /* Obtiene una linea del archivo */ if (c != NULL) printf("%s", palabra); /* La despliega en pantalla */ } while (c != NULL); /* Se repite hasta encontrar NULL */

fclose(fp1);

return EXIT_SUCCESS;}Ahora utilizamos la función fgets ( ) la cual lee una línea completa, incluyendo el carácter

de nueva línea y coloca los datos en un buffer (espacio de memoria RAM temporal). El

buffer a ser leído es el primer argumento en la llamada a la función en tanto que el

máximo número de caracteres a ser leídos es el segundo argumento, seguido por el

puntero de archivo. Esta función leerá caracteres en el buffer hasta que encuentre el

caracter de nueva línea, ó lea el máximo número de caracteres menos uno, lo que ocurra

primero. El espacio final se reserva para el caracter nulo (NULL) del fin de la cadena.

Además, si se encuentra un EOF, la función retorna NULL. NULL está definido a cero en el

archivo stdio.h

Los ejemplos de éste capítulo realmente no requieren de mucha explicación, el código lo

podemos modificar para introducir el nombre del archivo que deseamos abrir de ésta

forma:

#include <stdio.h>#include <stdlib.h>

int main(){ FILE *fp1;

Page 18: Tarea pagweb

char palabra[100], nombre[25]; char *c;

printf("Introduzca el nombre del archivo -> "); scanf("%s", nombre); /* Lee el archivo deseado */ fp1 = fopen(nombre, "r"); if (fp1 == NULL) { printf("Error al abrir el archivo \n"); exit (EXIT_FAILURE); }

do { c = fgets(palabra, 100, fp1); /* Obtiene una linea del archivo */ if (c != NULL) printf("%s", palabra); /* La despliega en pantalla */ } while (c != NULL); /* Hasta encontrar NULL */

fclose(fp1);

return EXIT_SUCCESS;}La salida del programa es la siguiente:

Volver al principio

Page 19: Tarea pagweb

Asignación especial

A lo largo de este capítulo hemos tratado el uso de diferentes funciones para operaciones

de lectura y escritura, se trata de un tema particularmente útil en el desarrollo de un

programa. Como seguramente habrá notado, utilizamos para los ejemplos un archivo

llamado Prueba.htm, por la extensión utilizada y por la naturaleza del texto incluído

en el mismo sabemos que se trata de un documento web que puede ser visualizado en su

navegador. Para terminar este capítulo y a manera de resumen que a la vez nos sirva de

introducción al siguiente capítulo, le presento el siguiente código que Yo espero despierte

en Usted un poco (ó un mucho) de curiosidad, experimente con el programa y si Usted

desea, mándeme su opinión por correo electrónico.

#include <stdio.h>#include <stdlib.h>

enum HTMLid{ HTML_NINGUNO, HTML_BODY, HTML_cBODY, HTML_B, HTML_cB, HTML_HTML, HTML_cHTML, HTML_CENTER, HTML_cCENTER};

static struct{ char *htmlcodigo; enum HTMLid id;}lista_de_codigos[]={ {"<HTML>", HTML_HTML}, {"</HTML>", HTML_cHTML}, {"<BODY>", HTML_BODY}, {"</BODY>", HTML_cBODY}, {"<CENTER>", HTML_CENTER}, {"</CENTER>", HTML_cCENTER}, {"<B>", HTML_B},

Page 20: Tarea pagweb

{"</B>", HTML_cB}, {NULL, HTML_NINGUNO}};

char texto[128];int itexto=0, c;int main(){ int i, ietiqueta=0; char etiqueta[64]; FILE *archivo; enum HTMLid codigo;

archivo = fopen("Prueba.htm", "r"); /* Abre el archivo para lectura */

if (archivo == NULL) { printf("El archivo no existe...\n"); exit (EXIT_FAILURE); } else { do /* Checa todos los caracteres del archivo */ { c=getc(archivo); if (c=='<') /* Lee la etiqueta html */ { /* incluye el principio de la etiqueta */ etiqueta[ietiqueta++]=c; do { c=getc(archivo); etiqueta[ietiqueta++]=c; } while(c!='>'); etiqueta[ietiqueta]=0; codigo=HTML_NINGUNO; for(i=0; lista_de_codigos[i].htmlcodigo!=NULL; i++) { if(stricmp(etiqueta, lista_de_codigos[i].htmlcodigo)==0) { codigo=lista_de_codigos[i].id; break; } } switch (codigo) { case HTML_NINGUNO: break; case HTML_HTML: printf("Empieza el documento web \n"); break; case HTML_cHTML: printf("Fin del documento web \n");

Page 21: Tarea pagweb

break; case HTML_B: printf("Empieza la etiqueta B \n"); break; case HTML_cB: printf("Termina la etiqueta B \n"); break; case HTML_BODY: printf("Empieza la etiqueta BODY \n"); break; case HTML_cBODY: printf("Termina la etiqueta BODY \n"); break; case HTML_CENTER: printf("Empieza la etiqueta CENTER \n"); break; case HTML_cCENTER: printf("Termina la etiqueta CENTER \n"); break; } ietiqueta=0; } else rollo(); } while(c!=EOF); } fclose(archivo); texto[itexto]=0; printf(texto); return EXIT_SUCCESS;}

rollo(){ texto[itexto++]=c;}La salida del programa es la siguiente:

Page 22: Tarea pagweb

Volver al principio

© 1998, 1999 Virgilio Gómez Negrete, Derechos Reservados

Aspectos Generales:

URL: http://www.modelo.edu.mx/univ/virtech/prograc/clecesc.htm#superior

Utilización en el Aula:

Tipología:

Hecha por :Virgilio Gómez Negrete. No especifica su cargo o grado de Instrucción.

Destinatario: La página fue pensada para ser usada por alumnos de niveles avanzados,

especialistas e investigadores y estudiantes.

Nivel: usuarios de nivel superior, estudiantes y profesionales.

Page 23: Tarea pagweb

Actividades: El sitio incluye actividades para realizar con los alumnos.

La página cuenta con diversos recursos y herramientas que permiten la interacción,

más no la descarga de materiales y suscripción a revistas. Está destinada principalmente a

profesionales de la educación, siendo el nivel académico de sus contenidos en el área de

educación profesional o superior. La página fue hecha en ciudad de México.

Aspectos Curriculares:

Interés para el Profesorado y Estudiantil : La página sirve para uso del docente, y

usuario común o estudiantil.

La página no permite descarga de materiales, libros digitales y si hay vínculos hacia

otras páginas.

Aspectos Gráficos:

El entorno estático está diseñado con una fuente de tamaño normal para su lectura,

los colores son suaves lo cual hace agradable la interfaz y posee imágenes.

En relación al entorno dinámico, posee ningún elemento animado.

No tiene elementos multimedia, tales como videos, archivos de imágenes o sonidos.

Aspectos Técnicos:

Libertad de Acceso: El acceso a la página es gratis y los usuarios no pueden

suscribir a un envío de noticias vía correo electrónico para enterarse de las novedades de

allí descritas.

Publicidad: no cuenta con enlaces a cursos pagos y promoción de eventos ni posee

spam de publicidad.

Page 24: Tarea pagweb

Navegabilidad: si posee hipervínculos o enlaces dentro de la página. La

navegabilidad en la página se hace ligera y no tarda en cargar , los vínculos uno solo no

está correctamente activos.

Interactividad: No posee, foros, chat, si posee posibilidad de envío de mensajes, no

cuenta con cuestionarios. No tiene un blog y si un correo de contacto.

Conclusión:

La página se adapta un poco más a los requerimientos académicos de la asignatura

pero no totalmente lo que será utilizada como material de consulta para el profesor.

Ejemplo de página 3:

Previo: Manual de C Arriba: Manual de C Siguiente: 1. Compilación de un programa

Regresar

Page 25: Tarea pagweb

Índice General

1. Compilación de un programa en C/C++ o 1.1 Creación, compilación y ejecución de un programa

1.1.1 Creación del programa 1.1.2 Compilación 1.1.3 Ejecución del programa

o 1.2 El modelo de compilación de C o 1.3 El preprocesador o 1.4 Compilador de C o 1.5 Ensamblador o 1.6 Ligador o 1.7 Algunas opciones útiles del compilador o 1.8 Uso de las bibliotecas o 1.9 Ejemplos

1.9.1 Creación de una biblioteca estática 1.9.2 Creación de una biblioteca compartida

o 1.10 Funciones de la biblioteca de UNIX 1.10.1 Encontrando información acerca de las bibliotecas.

o 1.11 Ejercicios

2. Principios de C o 2.1 Orígenes del C o 2.2 Características de C o 2.3 Estructura de un programa en C o 2.4 Variables

2.4.1 Definición de variables globales 2.4.2 Lectura y escritura de variables

o 2.5 Constantes o 2.6 Operadores Aritméticos o 2.7 Operadores de Comparación o 2.8 Operadores lógicos o 2.9 Orden de precedencia o 2.10 Ejercicios

3. Estructuras Condicionales o 3.1 La sentencia if o 3.2 El operador ? o 3.3 La sentencia switch o 3.4 Ejercicios

Page 26: Tarea pagweb

4. Iteración o 4.1 La sentencia for o 4.2 La sentencia while o 4.3 La sentencia do-while o 4.4 Uso de break y continue o 4.5 Ejercicios

5. Arreglos y cadenas o 5.1 Arreglos unidimensionales y multidimensionales o 5.2 Cadenas o 5.3 Ejercicios

6. Funciones o 6.1 Funciones void o 6.2 Funciones y arreglos o 6.3 Prototipos de funciones o 6.4 Ejercicios

7. Más tipos de datos o 7.1 Estructuras

7.1.1 Definición de nuevos tipos de datos o 7.2 Uniones o 7.3 Conversión de tipos (casts) o 7.4 Enumeraciones o 7.5 Variables estáticas o 7.6 Ejercicios

8. Apuntadores o 8.1 Definición de un apuntador o 8.2 Apuntadores y Funciones o 8.3 Apuntadores y arreglos o 8.4 Arreglos de apuntadores o 8.5 Arreglos multidimensionales y apuntadores o 8.6 Inicialización estática de arreglos de apuntadores o 8.7 Apuntadores y estructuras o 8.8 Fallas comunes con apuntadores o 8.9 Ejercicios

Page 27: Tarea pagweb

9. Asignación dinámica de memoria y Estructuras dinámicas o 9.1 Uso de malloc, sizeof y free o 9.2 calloc y realloc o 9.3 Listas ligadas o 9.4 Programa de revisión o 9.5 Ejercicios

10. Tópicos avanzados con apuntadores o 10.1 Apuntadores a apuntadores o 10.2 Entrada en la línea de comandos o 10.3 Apuntadores a funciones o 10.4 Ejercicios

11. Operadores de bajo nivel y campos de bit o 11.1 Operadores sobre bits o 11.2 Campos de bit

11.2.1 Portabilidad o 11.3 Ejercicios

12. El preprocesador de C o 12.1 Directivas del preprocesador

12.1.1 #define 12.1.2 #undef 12.1.3 #include 12.1.4 #if Inclusión condicional

o 12.2 Control del preprocesador del compilador o 12.3 Otras directivas del preprocesador o 12.4 Ejercicios

13. C, UNIX y las bibliotecas estándar o 13.1 Ventajas del usar UNIX con C o 13.2 Uso de funciones de bibliotecas y llamadas del sistema

14. Biblioteca <stdlib.h> o 14.1 Funciones aritméticas

Page 28: Tarea pagweb

o 14.2 Números aleatorios o 14.3 Conversión de cadenas o 14.4 Búsqueda y ordenamiento o 14.5 Ejercicios

15. Biblioteca <math.h> o 15.1 Funciones matemáticas o 15.2 Constantes matemáticas

16. Entrada y salida (E/S) stdio.h o 16.1 Reportando errores

16.1.1 perror() 16.1.2 errno 16.1.3 exit

o 16.2 Flujos 16.2.1 Flujos predefinidos

o 16.3 E/S Basica o 16.4 E/S formateada

16.4.1 printf 16.4.2 scanf

o 16.5 Archivos 16.5.1 Lectura y escritura de archivos

o 16.6 sprintf y sscanf 16.6.1 Petición del estado del flujo

o 16.7 E/S de bajo nivel o sin almacenamiento intermedio o 16.8 Ejercicios

17. Manejo de cadenas <string.h> o 17.1 Funciones básicas para el manejo de cadenas

17.1.1 Búsqueda en cadenas o 17.2 Prueba y conversión de caracteres <ctype.h> o 17.3 Operaciones con la memoria <memory.h> o 17.4 Ejercicios

18. Acceso de Archivos y llamadas al sistema de directorios o 18.1 Funciones para el manejo de directorios <unistd.h>

18.1.1 Busqueda y ordenamiento de directorios: sys/types.h,sys/dir.h o 18.2 Rutinas de manipulación de archivos: unistd.h, sys/types.h, sys/stat.h

18.2.1 Permisos de accesos a archivos

Page 29: Tarea pagweb

18.2.2 Estado de un archivo 18.2.3 Manipulación de archivos: stdio.h, unistd.h 18.2.4 Creación de archivos temporales: <stdio.h>

o 18.3 Ejercicios

19. Funciones para el tiempo o 19.1 Funciones básicas para el tiempo o 19.2 Ejemplos de aplicaciones de funciones del tiempo.

19.2.1 Ejemplo 1: Tiempo (en segundos) para hacer algún cálculo. 19.2.2 Ejemplo 2: Inicializar la semilla de un número aleatorio.

o 19.3 Ejercicios

20. Control de procesos: <stdlib.h>, <unistd.h> o 20.1 Ejecutando comandos de UNIX desde C o 20.2 execl() o 20.3 fork() o 20.4 wait() o 20.5 exit() o 20.6 Ejercicios

21. Compilación de Programas con Archivos Múltiples o 21.1 Archivos Cabezera o 21.2 Variables y Funciones Externas

21.2.1 Alcance de las variables externas o 21.3 Ventajas de Usar Varios Archivos o 21.4 Como dividir un programa en varios archivos o 21.5 Organización de los Datos en cada Archivo o 21.6 La utilería Make

21.6.1 Programando Make o 21.7 Creación de un Archivo Make (Makefile) o 21.8 Uso de macros con Make o 21.9 Ejecución de Make

22. Comunicación entre procesos (IPC Interprocess Communication), PIPES o 22.1 Entubando en un programa de C <stdio.h>

22.1.1 popen() Tubería formateada 22.1.2 pipe() Tubería de bajo nivel

Page 30: Tarea pagweb

23. Sockets o 23.1 Creación y nombrado de sockets o 23.2 Conectando sockets de flujo

23.2.1 Transferencia de datos en un flujo y cerrado

Última modificación : 2005-08-12Héctor Tejeda V

[email protected]

Aspectos Generales:

URL: http://www.fismat.umich.mx/mn1/manual/node1.html

Utilización en el Aula:

Tipología:

Hecha por : Héctor Tejeda V. No especifica su cargo o grado de Instrucción.

Destinatario: La página fue pensada para ser usada por alumnos de niveles avanzados,

especialistas e investigadores y estudiantes.

Nivel: usuarios de nivel superior, estudiantes y profesionales.

Actividades: El sitio no incluye actividades para realizar con los alumnos.

La página no cuenta con diversos recursos y herramientas que permiten la

interacción, más no la descarga de materiales y suscripción a revistas. Está destinada

principalmente a profesionales de la educación, siendo el nivel académico de sus

contenidos en el área de educación profesional o superior. La página fue hecha en ciudad de

México.

Aspectos Curriculares:

Page 31: Tarea pagweb

Interés para el Profesorado y Estudiantil: La página sirve para uso del docente, y usuario

común o estudiantil.

La página no permite descarga de materiales, libros digitales y si hay vínculos hacia

otras páginas.

Aspectos Gráficos:

El entorno estático está diseñado con una fuente de tamaño normal para su lectura,

los colores son suaves lo cual hace agradable la interfaz y no posee imágenes.

En relación al entorno dinámico, no posee ningún elemento animado.

No tiene elementos multimedia, tales como videos, archivos de imágenes o sonidos.

Aspectos Técnicos:

Libertad de Acceso: El acceso a la página es gratis y los usuarios no pueden

suscribir a un envío de noticias vía correo electrónico para enterarse de las novedades de

allí descritas.

Publicidad: no cuenta con enlaces a cursos pagos y promoción de eventos ni posee

spam de publicidad.

Navegabilidad: si posee hipervínculos o enlaces dentro de la página. La

navegabilidad en la página se hace ligera y no tarda en cargar, los vínculos están

correctamente activos.

Interactividad: No posee, foros, chat, si posee posibilidad de envío de mensajes, no

cuenta con cuestionarios. No tiene un blog y si posee un correo de contacto.

Conclusión:

La página se adapta un poco más a los requerimientos académicos de la asignatura

pero no totalmente por lo que será utilizada solo como material de consulta para el profesor.