elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Java [Guía] Patrones de diseño - Parte 1


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Necesito algunos consejos para mejorar la lectura y escritura de ficheros en C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Necesito algunos consejos para mejorar la lectura y escritura de ficheros en C  (Leído 666 veces)
DarkSorcerer

Desconectado Desconectado

Mensajes: 69



Ver Perfil
Necesito algunos consejos para mejorar la lectura y escritura de ficheros en C
« en: 24 Enero 2014, 02:47 »

Para repasar en programación en C, quise crear un programa que consiste en escribir un fichero de texto, para despues leerlo, tengo unas advertencias que tienen que ver con el comando exit(1), además, ¿ Existe alguna forma de escribir en el fichero cada vez que se teclea el caracter sin apretar ENTER ?, me gustaría poder escribir en el fichero a medida que tecleo el caracter y si hay una equivocacón, borrarlo del fichero, además había propuesto que el fichero pudiera escribir cadenas de tal manera que incluya los espacios en blanco. Un pequeño problema es cuando se lee el fichero, al final de la ultima linea aparece un caracter extraño, por ejemplo, me aparece esto

Código:
Escriba su oracion: Hola soy Goku, y esta sera mi gran batalla.


Fichero escrito exitosamente.

Comenzando lectura del fichero:

Hola soy Goku, y esta sera mi gran batalla.ÿ

RUN SUCCESSFUL (total time: 17s)


Y otro problema estético que tengo es que cuando escribo mi oración por medio del teclado, si me equivoque en una palabra, al momento de borrar aveces no me borrar de la pantalla las letras que quiero eliminar, si no que el cursor se desplaza hacia atras sin borrar, solo para sobrescribir.

Código
  1. /*
  2.  * File:   main.c
  3.  * Author: Rodrigo Pizarro
  4.  *
  5.  * Este programa permite escribir y leer ficheros de texto.
  6.  *
  7.  * Created on 23 de enero de 2014, 09:55 PM
  8.  */
  9.  
  10. #include <stdio.h>
  11. #include <ctype.h>
  12.  
  13. FILE *ficheroEscritura;
  14. FILE *ficheroLectura;
  15.  
  16. /**
  17.  * Funcion que permite preparar y abrir el fichero para su lectura.
  18.  */
  19.  
  20. void prepararLectura(){
  21.  
  22.    ficheroLectura = fopen("fichero.txt","r");
  23.  
  24.    if(ficheroLectura == NULL){
  25.  
  26.        printf("\n\nError: Fichero de lectura no encontrado o roto, se cerrara el programa.");
  27.        exit(1);
  28.  
  29.    }
  30.  
  31. }
  32.  
  33. /**
  34.  * Funcion que permite preparar y abrir el fichero para su escritura.
  35.  */
  36.  
  37. void prepararEscritura(){
  38.  
  39.    ficheroEscritura = fopen("fichero.txt","w");
  40.  
  41.    if(ficheroEscritura == NULL){
  42.  
  43.        printf("\n\nNo se pudo crear el archivo de lectura, se cerrara el programa.");
  44.        exit(1);
  45.  
  46.    }
  47.  
  48. }
  49.  
  50. /**
  51.  * Funcion que permite leer caracter por caracter un fichero e imprimirlo por
  52.  * la pantalla.
  53.  */
  54.  
  55. void leerFichero(){
  56.  
  57.    char letra;
  58.  
  59.    printf("\n\nComenzando lectura del fichero:\n\n");
  60.  
  61.    while(!feof(ficheroLectura)){
  62.  
  63.        letra = getc(ficheroLectura);
  64.  
  65.        if(isspace(letra)){
  66.  
  67.            printf(" ");
  68.  
  69.        }else{
  70.  
  71.            printf("%c",letra);
  72.  
  73.        }
  74.  
  75.    }
  76.  
  77.    fclose(ficheroLectura);
  78.  
  79. }
  80.  
  81. /**
  82.  * Funcion que permite escribir caracter a caracter en el fichero.
  83.  */
  84.  
  85. void escribirFichero(){
  86.  
  87.    printf("Escriba su oracion: ");
  88.  
  89.    char cadena[140];
  90.    gets(cadena);
  91.  
  92.    fputs(cadena,ficheroEscritura);
  93.  
  94.    if(fclose(ficheroEscritura) == 0){
  95.  
  96.        printf("\n\nFichero escrito exitosamente.");
  97.  
  98.    }else{
  99.  
  100.        printf("\n\nError: No se pudo cerrar el fichero.");
  101.  
  102.    }
  103.  
  104. }
  105.  
  106. int main(){
  107.  
  108.    prepararEscritura();
  109.    escribirFichero();
  110.    prepararLectura();
  111.    leerFichero();
  112.  
  113.    getchar();
  114.    return 0;
  115.  
  116. }


« Última modificación: 24 Enero 2014, 02:50 por DarkSorcerer » En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Necesito algunos consejos para mejorar la lectura y escritura de ficheros en C
« Respuesta #1 en: 24 Enero 2014, 03:18 »

¿ Existe alguna forma de escribir en el fichero cada vez que se teclea el caracter sin apretar ENTER ?
Con la biblioteca estándar de C no es posible, se puede utilizando extensiones como bibliotecas de terceros (por ejemplo ncurses) o el API del SO (por ejemplo Win32).

Un pequeño problema es cuando se lee el fichero, al final de la ultima linea aparece un caracter extraño
Eso sucede porque en la función "leerFichero" el bucle para la lectura es controlado por la función feof y el uso de esta ultima (salvo excepciones) no se recomienda. También debes cambiar el tipo de la variable "letra" para que coincida con el tipo de la función getc (el tipo de retorno de esta es "int").

Si se modifica esa función a:
Código
  1. void leerFichero(void)
  2. {
  3.   int letra;
  4.  
  5.   puts("Comenzando lectura del fichero:");
  6.   while ((letra = getc(ficheroLectura)) != EOF)
  7.      putchar(letra);
  8.  
  9.   fclose(ficheroLectura);
  10. }
El texto debe presentarse sin el carácter adicional.

Por ultimo debes evitar en lo posible el uso de variables "globales", en su lugar pasa los valores necesarios como argumentos a la función.

Un saludo


En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
¿Algunos consejos para mi?
Programación General
GorGutz 3 854 Último mensaje 2 Junio 2011, 21:00
por chelita
lectura y escritura de ficheros
Programación C/C++
franfis 6 1,985 Último mensaje 20 Abril 2013, 19:16
por cypascal
¿Está tu CV preparado para leerse en móvil? Algunos consejos y apps para ...
Noticias
wolfbcn 0 311 Último mensaje 5 Febrero 2016, 22:22
por wolfbcn
Lectura y escritura de ficheros con semáforos
Programación C/C++
Pol23 0 225 Último mensaje 18 Noviembre 2018, 22:57
por Pol23
Ayuda con lectura y escritura en ficheros Java
Java
LuisCardenas123 7 551 Último mensaje 2 Mayo 2019, 19:52
por rub'n
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines