Hola y bienvenido de nuevo.
En esta conferencia, me gustaría para hablar
sobre cómo podemos leer el texto de un archivo.
Por ahora, vamos a concéntrese en leer archivos de texto.
Entonces, si queremos leer el personaje desde un archivo de texto,
usaremos un par de funciones.
El primero será fgetc.
Esto leerá un carácter de un texto. archivo que se ha abierto para su lectura.
Recuerda, siempre tenemos que abrir subir el archivo antes de que podamos realizar cualquier operación
de archivo en él a menos que es un cambio de nombre o una
eliminación y luego el archivo no se puede abrir.
Pero si quieres leer y escribiendo o añadiendo,
tenemos que abrir ese archivo.
Sabemos que podemos abrirnos archivos con diferentes modos.
En este caso de lectura, tendríamos para abrir con una r o una r más,
y luego podemos comenzar a llamar a fgetc.
La función fgetc toma el puntero de archivo como
su único argumento, y devolverá el carácter leído como tipo int.
Así que aquí un ejemplo, creamos un mchar escriba int, y decimos fgetc pfile.
Va a leer un personaje en la variable mchar con pfile
como puntero de archivo.
Piense en pfile ya ha sido abierto volver al puntero de archivo.
El mchar es de tipo en porque e, cuyo carácter especial es
nuestro final de archivo, se devuelve si se ha llegado al final del archivo.
Entonces siempre podemos verificar eso entero para ver si es eof.
Y si lo es, no queremos para leer
más, ya no queremos llamar a fgetc.
La función fgetc, que es equivalente a fgetc también está disponible.
Entonces getc es casi lo mismo que fgetc, solo desea usar fgetc.
Creo que tiene algo más protección en él.
Con getc, requiere un argumento de tipo archivo estrella y devuelve y
devuelve el carácter rojo como tipo int.
Es prácticamente idéntico a fgetc.
La única diferencia entre ellos es que getc puede implementarse como una
macro, y ni siquiera saber qué es una macro ahora.
Así que nos vamos a quedar con usando fgetc como nuestra función
para leer caracteres.
Puede leer el contenido de un archivo.
Nuevamente, cuando sea necesario, puede usar esta función de rebobinado que coloca el
archivo especificado por el archivo puntero al principio del archivo.
Entonces puedes usar rebobinar si quieres leer de nuevo.
Solo di rebobinar y luego el puntero de archivo, bastante básico.
Así que aquí tienes un ejemplo.
Tienes que incluir el encabezado io estándar cada vez
que hacemos operaciones de archivo.
En nuestra función principal, somos vamos a crear nuestro puntero de archivo.
Si quiero inicializar esto a nulo y vamos a crear un número entero.
Lo primero que vamos a hacer es vamos a abrir
el archivo usando la llamada f open, y vamos a especificar el nombre del archivo y vamos a
especificar que es para lectura.
Eso devolverá nuestro puntero de archivo.
Entonces ahora nuestro puntero fp es apuntando a un archivo válido.
Si no pudo abrir el archivo. TXT eso no está en el
camino correcto o lo que sea, devolverá un valor nulo.
Entonces quieres verificar si es nulo, asegúrese de que fp no sea nulo.
Si es nulo, salga del programa.
De lo contrario, cuando normalmente leer caracteres, los tendrá dentro
de un bucle.
Así que aquí estamos diciendo mientras c es igual a fgetc fp, esto es leer un carácter
de nuestro archivo, pasando el puntero del archivo a fgetc, que devuelve
un número entero.
Recuerda, podemos saltarnos del bucle si ese entero devuelto es el final del archivo porque
no queremos para leer más allá del final del archivo.
De lo contrario, podemos simplemente imprimir nuestro personaje usando el porcentaje cy c.
Lo último que queremos hacer es queremos cerrar el archivo, luego queremos
establecer nuestro puntero de archivo a nulo, y podemos volver.
Intentemos utilizar esto, creando este dentro de bloques de código.
Aquí está nuestro programa dentro de bloques de código.
Dice, este programa no va a funciona a menos que tengamos un archivo en el disco donde
se esté ejecutando el programa.
Entonces, primero, si construimos esto, debería construirse bien, debería crear
un ejecutable en algún lugar de su disco duro.
He estado poniendo todos mis proyectos dentro de mi directorio de préstamos dot.
Entonces, si voy a mis descargas directorio y voy al nombre
del proyecto, que es solo una prueba proyecto, así que donde sea que esté almacenando sus proyectos, el
mío está en prueba.
Si voy a probar, verás que dentro del directorio bin, dentro de
la depuración está su ejecutable.
Aquí es donde creas tu archivo si tuvieras un familiar.
Camino, así que aquí podría crear un nuevo archivo y podemos tenerlo como un archivo de texto
para que pueda crearlo como un texto documento, y tiene que llamarse archivo.
Y luego voy a poner alguna información en él.
Solo voy a poner algunos datos como hola, este es el salto de línea de Jason.
Está bien, no, así sucesivamente, y lo voy a salvar.
Este archivo debe existir en para que este programa funcione.
Entonces creé el archivo.
Ahora cuando lo ejecuto, con suerte leerá lo que acabo
de agregar y lo imprimirá.
Dice error y apertura de archivo. no archivar ese directorio de
archivos, y eso probablemente se deba a que tenerlo en la carpeta de depuración.
Y esto no se está ejecutando en depuración.
Intentemos ejecutarlo en depuración y Creo que probablemente funcionaría ahora.
Podemos decir depurar, empezar.
Esto buscará el ejecutable en el directorio de depuración con suerte.
Queremos asegurarnos de que se ejecute.
Todavía no estás ahí, así que tienes que hacer seguro que sabes dónde está el ejecutable.
Probemos en otro lugar o mejor aún, podría ejecutar el ejecutable dentro de
la depuración directorio y debería encontrarlo allí.
Entonces, si hago doble clic aquí, en realidad no se detiene.
Salta.
Entonces, lo que puedes hacer para eso
es en lugar de regresar, puede decir que el sistema se pausa y no saldrá el programa hasta que lo haya ejecutado.
Intentémoslo ahora.
Así que ahora hizo una pausa, ¿no? ejecutar el programa.
Y lo que viste fue hola soy Jason.
Pudo encontrar el archivo, imprimió bien, imprimió no
y luego se detuvo.
De lo contrario, cuando ejecuta el programa, imprime los datos tan
rápido y sale del programa que ha terminado.
Así es como puedes probarlo.
Debe almacenarse donde el ejecutable se almacena desde donde se ejecuta.
Debe estar corriendo desde algún lugar else en el directorio de su proyecto.
No estoy seguro de dónde se está ejecutando.
Podríamos intentar mover el archivo a donde está el código fuente.
Puede que lo esté ejecutando desde aquí.
Así que aquí lo pondremos aquí.
Y ahora intentaremos ejecutarlo desde la identificación y tal vez funcione.
No construimos.
Lo ejecutamos y pudo encontrarlo.
Entonces parece que tenemos para poner el archivo dentro de donde está
el código fuente.
Así que mientras pongamos ese archivo expediente. texto dentro del
archivo del proyecto, podrá verlo.
Tan rápido ejemplo de cómo puedes abre un archivo y lee caracteres individuales,
no es el más eficiente forma de leer de un archivo porque
normalmente desea leer cadenas.
Pero esto lo abrirá.
Ves la llamada abierta, y notas el bucle while.
Eso es importante.
Regresemos y hablemos de cómo podemos leer cadenas de un archivo que
es mucho más eficiente.
Eso es leer un solo carácter.
¿Qué tal leer una cadena?
Puedes usar la función fgets para leer desde cualquier archivo o flujo.
Esto leerá una cadena.
Se necesita una cadena de caracteres tiene el primer parámetro.
La cantidad de caracteres que desea read y luego el puntero del archivo real.
Entonces esta función va a leer una cadena en el área
de memoria apuntada por la cadena.
Entonces tienes que realmente pasar al búfer donde
se almacenarán los datos.
Y eso es un puntero, por lo que tiene que asignar memoria para ello.
Y luego leerá de el archivo especificado como tercer parámetro que
es el puntero del archivo.
Y luego el nchar se va para decir cuántos datos leer.
Entonces, si pones nchars como 10, se leerá en 10 caracteres a menos que primero
llegue a un salto de línea.
Entonces va a leer un línea completa o leerá el número
de caracteres que especificar en el segundo parámetro.
El final de la línea está especificado por el barra invertida n, lo que ocurra primero.
Si un carácter de nueva línea es rojo, se retiene en
la cadena y un terminador nulo será añadido al final de la cadena.
Entonces, si realmente especificaste más caracteres, leería hasta el salto de línea,
y luego salta y luego obtiene ese carácter
de nueva línea y pone un carácter nulo al final.
Si no hay error, fgets es va a devolver el puntero,
que es el primer parámetro.
Devolverá un puntero que se devuelve de la función.
Y luego también va para rellenar el puntero str
como primer parámetro.
Si hay un error, se devuelve un valor nulo.
Y luego leer el final del archivo hace que se devuelva nulo, eso significa
que lee todas sus cadenas.
Así que veamos un ejemplo.
Aquí tenemos nuestro principal y estamos creando nuestro puntero de archivo creando una
cadena de caracteres.
Aquí este es un puntero que no hicimos mal ubicar cualquier dato para ello, simplemente
creamos una matriz de caracteres.
Abrimos el archivo para leerlo, leyendo solo porque es r.
Dijimos que si es nulo, salte.
De lo contrario, solo decimos fgets, leemos en 60 caracteres.
O si el avance de línea es antes que, aparecerá un
avance de línea y luego lo imprimirá y lo que haya en el búfer str.
Entonces str es eso primero personaje que se transmite.
Y luego cerramos el puntero del archivo, configúrelo en nulo y devuelva cero.
Así que, de nuevo, echemos un vistazo esto dentro de nuestro código bloquea IDE.
Lo único que ha cambiado en esto El programa es realmente las líneas 14 a 17.
Estamos usando fgets para leer nuestra cadena in, y luego tenemos un búfer str.
Así que también necesitamos crear un matriz
de caracteres aquí arriba, que es nuestro str, y queremos que contenga 60.
Estamos leyendo en 60.
Agregaremos un avance de línea, por lo que es va a leer en 59 y luego agrega un salto
de línea al final.
Entonces podríamos decir 61.
Y luego los fgets van a estar en una declaración if,
y se leerá en cada cadena hasta que alcanza 60 caracteres o una nueva línea, e
imprimirá esa cadena.
Notarás que eso no es un ciclo while, por lo que no
estamos leyendo hasta el final del archivo.
Leemos el final de archivo, obtenemos un nulo.
Entonces, si construimos esto, queremos hacer seguro que tenemos nuestras cotizaciones correctamente.
Siempre que copie desde powerpoint estropea las comillas.
Y queremos asegurarnos creamos nuestra variable c no se usa, eso
está bien.
Así que sigamos adelante y ejecutemos esto.
Y ves, hola, este es Jason.
Así que, en realidad, lea todo un línea de texto del archivo.
Decía en la primera línea.
Entonces lo llamarías de nuevo y lea en la segunda línea.
Si cambia el número de bytes leer, digamos que solo
queremos leer 10, leería en 10 y luego devolvería esos 10 en
lugar de leer la línea completa.
Así que aquí lo tenemos hola yo.
Entonces se leerá en número de caracteres
su segundo parámetro o hasta que obtenga una línea feed y lo almacena en str.
Str es una matriz de caracteres.
Lo imprimimos fgets.
Fgets es mucho más eficiente para la lectura.
Porque no estamos leyendo un personaje y, a
la vez, estamos leyendo más datos.
Leer un personaje en un el tiempo no es tan eficiente.
Entonces ahora sabemos leer en single caracteres, sabemos cómo
leer en cadenas hasta que lean un nuevo línea o varios caracteres.
Pero también puedes leer en entrada formateada de un archivo.
Entonces tenemos getc, fgetc, fgets.
Y ahora tenemos otro función llamada fscanf.
Esta es una entrada formateada.
La entrada formateada es de datos especificados por like tiene un delimitador o tiene
un formato específico asociado.
Esta función fscanf toma un archivo desde la secuencia y luego un formato.
El formato es como el printf especificadores de formato que utiliza.
Entonces, si quieres leer en números enteros o dobles, puede especificar datos dentro del
archivo que se introducen en dobles y
lo leerá hasta que vea como el escaneo hasta que vea un carácter de espacio en blanco.
Entonces, el primer argumento para el fscanf La función es un puntero a un objeto
de archivo que identifica la secuencia.
Tenemos que saber que archivo del que estamos leyendo.
El segundo argumento de la la función es el formato.
Esta es una cadena de c que contiene uno o más de los siguientes elementos.
Carácter de espacio en blanco, no espacios en blanco carácter, especificadores de formato.
El uso es el mismo que el scanf y en printf, pero en su
lugar es de un archivo.
Entonces, dentro de las comillas dobles, puedes poner texto, puede poner espacios en blanco o caracteres que
no sean espacios en blanco, pero los especificadores de formato son realmente la
forma en que leerá los datos.
Y luego especificas variables en el que quieres leerlo.
Entonces la función regresa el número
de elementos de entrada coincidentes y asignados correctamente.
Así que así es como se ve.
Notarás que la principal es creando tres matrices de caracteres, str1, str2 y str3,
de solo diez bytes cada una.
Creamos un número entero llamado año, presionamos un puntero de archivo.
Lo primero que hacemos abrimos el archivo.
En este caso, estamos abriendo para leer y escribir.
Pero no vamos a escribir realmente cualquier cosa, solo vamos a mostrar
lo que estamos leyendo.
Verificamos para asegurarnos de que el archivo puntero no es igual a nulo.
Y luego aquí, en realidad estamos poner algo en el archivo fputs.
No hemos hablado de eso todavía pero esto es escribir algo.
Concéntrese aquí en fscanf.
El fscanf va a leer en datos formateados.
Y entonces, ¿qué va a hacer? se leerá
en tres cadenas separadas por espacios.
Y entonces ves el porcentaje como porcentaje de espacio como porcentaje de espacio
s porcentaje de espacio d.
Entonces estamos diciendo donde estamos vamos a leerlos en nuestra matriz
de tres caracteres y luego nuestro año, y tenemos que especificar el operador
de dirección para nuestro año.
Pero los datos tienen un formato forma específica cuando está escrito.
Y cuando lees algo que es formateado, debe comprender el formato
del archivo cómo está escrito.
Aquí sabemos que el archivo está escrito separando cadenas por espacios en blanco.
Entonces asi es como somos voy a leerlo.
Y para que podamos leerlo con una llamada fscanf.
Podemos usar nuestro formulario como especificadores. como nuestro segundo argumento y luego el
número variable de argumentos para cada separados de cada coma para especificar los datos
en los que queremos leerlos.
Y luego imprimimos eso data, las tres cadenas en el año y
luego nuevamente cerramos el archivo.
Y estas son las tres formas puede leer datos de un archivo.
Puede leer en caracteres, puede leer en cadenas o puede
leer datos formateados.
Y notarás la forma formateada de hacerlo es muy similar a scanf.
Usas especificadores de formato, variables para leer.
Tendremos un desafío en leer datos que le ayudarán a
familiarizarse más con esto.
Es bastante básico.
Vas a hacer tu abierto llamadas, utilizará
los punteros de archivo y para usar esas tres funciones.
Gracias.