Cambiar coma por punto en un archivo .txt

Iniciado por fafafa01, 16 Mayo 2016, 00:11 AM

0 Miembros y 1 Visitante están viendo este tema.

fafafa01

Hola como bien dice el titulo, tengo un archivo .txt así:
45,678
67,890

y yo quiero que queden así:
45.678
67.890

mi idea es, aprovechando que se que el caracter 8 en ascii es retroceso , el 44 la coma y el 46 el punto hacer esta función:

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

void main (void) {
FILE *archivo;
int c;

archivo=fopen("varx.txt","r+");
c=fgetc(archivo);
while (c != EOF) {
if (c==44) {
fputc(8,archivo);
fputc(46,archivo);
}
c=fgetc(archivo);
}
fclose(archivo);
}


el problema es que el archivo no se modifica, si alguien sabe que es lo que esta mal en el código y me lo dice me serviría de mucho, saludos.

MAFUS

En vez de usar números mágicos utiliza directamente los caracteres entre comillas simples.
Por otra parte, en vez de intentar ir a atrás insertando el carácter de control '\b' directamente atrasa una posición el puntero del archivo.

Con todo esto el código queda como sigue:

if (c==',') {
    fseek(archivo, -1, SEEK_CUR);
    fputc('.',archivo);
}

fafafa01


fary

Cita de: fafafa01 en 16 Mayo 2016, 00:11 AM
Hola como bien dice el titulo, tengo un archivo .txt así:
45,678
67,890

y yo quiero que queden así:
45.678
67.890


¿Cual se supone que es la diferencia despues de modificar el archivo?

Un byte a la izquierda.

fafafa01

cambiar la coma por el punto.

Cita de: fary en 16 Mayo 2016, 09:39 AM
¿Cual se supone que es la diferencia despues de modificar el archivo?



Kaxperday

Buenas, si he entendido bien lo que quieres es leer el contenido del archivo y sustituir su contenido por el mismo pero cambiando solo las comas por puntos.

Con el código de MAFUS debería bastar, porque el fputc() sobreescribe el valor que se encuentra en esa posición. Cada fgetc() mueve el puntero una posición adelante para continuar leyendo, cuando encuentras una ',' usas fseek(archivo, -1, SEEK_CUR) para que vuelva atrás y no pase al siguiente caracter y entonces con fputc('.',archivo), escribes '.' en la posición de la ',' por lo que quedaría sobreescrita.

Si es un fichero de texto entonces no lo abras como binario usa "rt" en vez de "r+".

Un saludo.


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

void main (void) {
FILE *archivo;
int c;

archivo=fopen("varx.txt","rt");
c=fgetc(archivo);
while (c != EOF) {
if (c==',') {
               fseek(archivo, -1, SEEK_CUR);
               fputc('.', archivo);
}
c=fgetc(archivo);
}
fclose(archivo);
}
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.

fafafa01

#6
Muchas gracias, creo que el error entonces seria que use el "r+". saludos.


Cita de: Kaxperday en 16 Mayo 2016, 15:06 PM
Buenas, si he entendido bien lo que quieres es leer el contenido del archivo y sustituir su contenido por el mismo pero cambiando solo las comas por puntos.

Con el código de MAFUS debería bastar, porque el fputc() sobreescribe el valor que se encuentra en esa posición. Cada fgetc() mueve el puntero una posición adelante para continuar leyendo, cuando encuentras una ',' usas fseek(archivo, -1, SEEK_CUR) para que vuelva atrás y no pase al siguiente caracter y entonces con fputc('.',archivo), escribes '.' en la posición de la ',' por lo que quedaría sobreescrita.

Si es un fichero de texto entonces no lo abras como binario usa "rt" en vez de "r+".

Un saludo.


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

void main (void) {
FILE *archivo;
int c;

archivo=fopen("varx.txt","rt");
c=fgetc(archivo);
while (c != EOF) {
if (c==',') {
              fseek(archivo, -1, SEEK_CUR);
              fputc('.', archivo);
}
c=fgetc(archivo);
}
fclose(archivo);
}





tampoco me anda   :( :( :( :(

Cita de: fafafa01 en 16 Mayo 2016, 17:02 PM
Muchas gracias, creo que el error entonces seria que use el "r+". saludos.



Kaxperday

Haz el favor, prueba el código que puse y dime si anda.

Postea el nuevo código, NO solo cambia el "r+" sino más cosas.

En caso de que no funcione dinos cual es el mensaje de error y si no le hay verifica que el archivo se abre correctamente.

Saludos.
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.

fafafa01

no me tira ningún error, es como que se cuelga y tengo que cerrar el programa con ctrl+c.

acá el código:


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

void main (void) {
FILE *archivo;
int c;

archivo=fopen("varx.txt","rt");
if (archivo == NULL){

printf("\nError de apertura del archivo. \n\n");
}
else {
c=fgetc(archivo);
while (c != EOF) {
if (c==',') {
    fseek(archivo, -1, SEEK_CUR);               
fputc('.',archivo);
}
c=fgetc(archivo);
}
}
fclose(archivo);
}

ivancea96

Coloca fflush después de una operación de escritura si luego vas a hacer otra lectura. Además, es preferible que utilices r+, pues la 't' no siempre stá soportdada, y en este caso, realmente no va a cambiar nada.

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

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

archivo=fopen("asd.txt","r+");
if (archivo == NULL){
printf("\nError de apertura del archivo. \n\n");
}
else {
c=fgetc(archivo);
while (c != EOF) {
if (c==',') {
fseek(archivo, -1, SEEK_CUR);
fputc('.',archivo);
fflush(archivo);
}
c=fgetc(archivo);
}
}
fclose(archivo);
}