Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Convertir a mayusculas o minusculas contenido de un texto en C

Estas en el tema de Convertir a mayusculas o minusculas contenido de un texto en C en el foro de C/C++ en Foros del Web. Hola a todos, Estoy desarrollando un programa en C que reciba por linea de comandos dos parámetros: -u/-l y el nombre de un fichero. Si ...
  #1 (permalink)  
Antiguo 25/11/2017, 11:48
 
Fecha de Ingreso: noviembre-2008
Ubicación: Sevilla
Mensajes: 157
Antigüedad: 15 años, 5 meses
Puntos: 2
Convertir a mayusculas o minusculas contenido de un texto en C

Hola a todos,

Estoy desarrollando un programa en C que reciba por linea de comandos dos parámetros: -u/-l y el nombre de un fichero.
Si recibo -u he de convertir el contenido del fichero a mayúsculas, y si recibo -l, a minúsculas.

Mi código es el siguiente:
Código:
#include <stdio.h>
#include <string.h>
void main(int argc, char* argv[]){
	
	if (argc != 3){
		printf("Número de parámetros incorrecto\n");	
	}
	else{
		FILE *archivo;
		
		char *modo = argv[1];
		char *nombre_archivo = argv[2];
		int caracter;
		
		
		archivo = fopen (nombre_archivo , "r");
		
		
		if(archivo == NULL){
			printf ("Error en la apertura del fichero\n");
		}
		else{
			
			while (feof(archivo) == 0 ){
				
				
			
				caracter = fgetc(archivo);

				printf("%c",caracter);
				
				if (strcmp(modo,"-u") == 0){
					
					if (caracter >= 'a' && caracter <= 'z'){
						caracter = caracter + 'A' - 'a';
					}
					fseek(archivo,-1,SEEK_CUR);
					fputc(caracter,archivo);
					fflush(archivo);
				}
				else if (strcmp(modo,"-l") == 0){
					if (caracter >= 'A' && caracter <= 'Z')
						caracter = caracter + 'a' - 'A';
					fseek(archivo,-1,SEEK_CUR);
					fputc(caracter,archivo);
				}
			}
		}
		
		
	}
	
}
El problema que tengo es que entro en un bucle infinito, ya que siempre coge lee el primer carácter. He probado a hacer otro fseek tras el que aparece, posicionando el cursor 1 posición después de la actual, pero sigue el problema del bucle infinito.

¿Qué es lo que está ocurriendo? ¿Cómo puedo solucionar el problema?

SAludos
  #2 (permalink)  
Antiguo 28/11/2017, 15:53
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 13 años, 10 meses
Puntos: 73
Respuesta: Convertir a mayusculas o minusculas contenido de un texto en C

El problema parece estar en la forma de abrir el fichero. Abres con fopen(nombre, "r"), con lo que estás abriendo un fichero de texto para sólo lectura. A continuación empiezas a leer caracteres, haces la conversión (si ha lugar), posicionas con fseek() y reescribes el carácter.

En primer lugar, estás utilizando fseek() en un fichero abierto en modo texto, pero esta función trabaja de forma ligeramente distinta en ficheros de texto y en ficheros binarios.

En segundo lugar, estás intentando escribir en un fichero que has abierto para sólo lectura...

...así que, para empezar, mírate con detalle las funciones fopen() y fseek(). También podría serte útil la función ftell(). Echa un vistazo a las funciones tolower() y toupper() para hacer la conversión (salvo que, por la razón que sea, tengas que hacer la conversión "a pelo").

Saludos,

Etiquetas: contenido, mayusculas, minusculas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:58.