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

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Cambiar coma por punto en un archivo .txt
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Cambiar coma por punto en un archivo .txt  (Leído 10,874 veces)
fafafa01

Desconectado Desconectado

Mensajes: 82


Ver Perfil
Cambiar coma por punto en un archivo .txt
« 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

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:
Código:
#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.


En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Cambiar coma por punto en un archivo .txt
« Respuesta #1 en: 16 Mayo 2016, 00:25 am »

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:
Código
  1. if (c==',') {
  2.    fseek(archivo, -1, SEEK_CUR);
  3.    fputc('.',archivo);
  4. }


En línea

fafafa01

Desconectado Desconectado

Mensajes: 82


Ver Perfil
Re: Cambiar coma por punto en un archivo .txt
« Respuesta #2 en: 16 Mayo 2016, 00:45 am »

No logro poder modificarlo.
En línea

fary


Desconectado Desconectado

Mensajes: 1.061



Ver Perfil WWW
Re: Cambiar coma por punto en un archivo .txt
« Respuesta #3 en: 16 Mayo 2016, 09:39 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?

En línea

Un byte a la izquierda.
fafafa01

Desconectado Desconectado

Mensajes: 82


Ver Perfil
Re: Cambiar coma por punto en un archivo .txt
« Respuesta #4 en: 16 Mayo 2016, 14:49 pm »

cambiar la coma por el punto.

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


En línea

Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: Cambiar coma por punto en un archivo .txt
« Respuesta #5 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.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. void main (void) {
  5. FILE *archivo;
  6. int c;
  7.  
  8. archivo=fopen("varx.txt","rt");
  9. c=fgetc(archivo);
  10. while (c != EOF) {
  11. if (c==',') {
  12.               fseek(archivo, -1, SEEK_CUR);
  13.               fputc('.', archivo);
  14. }
  15. c=fgetc(archivo);
  16. }
  17. fclose(archivo);
  18. }
  19.  
En línea

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

Desconectado Desconectado

Mensajes: 82


Ver Perfil
Re: Cambiar coma por punto en un archivo .txt
« Respuesta #6 en: 16 Mayo 2016, 17:02 pm »

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


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.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. void main (void) {
  5. FILE *archivo;
  6. int c;
  7.  
  8. archivo=fopen("varx.txt","rt");
  9. c=fgetc(archivo);
  10. while (c != EOF) {
  11. if (c==',') {
  12.               fseek(archivo, -1, SEEK_CUR);
  13.               fputc('.', archivo);
  14. }
  15. c=fgetc(archivo);
  16. }
  17. fclose(archivo);
  18. }
  19.  



tampoco me anda   :( :( :( :(

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


« Última modificación: 17 Mayo 2016, 14:40 pm por Eternal Idol » En línea

Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: Cambiar coma por punto en un archivo .txt
« Respuesta #7 en: 16 Mayo 2016, 19:31 pm »

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.
En línea

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

Desconectado Desconectado

Mensajes: 82


Ver Perfil
Re: Cambiar coma por punto en un archivo .txt
« Respuesta #8 en: 16 Mayo 2016, 21:32 pm »

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

acá el código:

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);
}
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Cambiar coma por punto en un archivo .txt
« Respuesta #9 en: 16 Mayo 2016, 22:01 pm »

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.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main() {
  5. FILE *archivo;
  6. int c;
  7.  
  8. archivo=fopen("asd.txt","r+");
  9. if (archivo == NULL){
  10. printf("\nError de apertura del archivo. \n\n");
  11. }
  12. else {
  13. c=fgetc(archivo);
  14. while (c != EOF) {
  15. if (c==',') {
  16. fseek(archivo, -1, SEEK_CUR);
  17. fputc('.',archivo);
  18. fflush(archivo);
  19. }
  20. c=fgetc(archivo);
  21. }
  22. }
  23. fclose(archivo);
  24. }
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Como cambiar el registro de w98se para cambiar el lugar de un archivo de sistema
Windows
carlosega 5 4,454 Último mensaje 19 Enero 2011, 15:56 pm
por Randomize
Punto y coma
Programación C/C++
@synthesize 4 3,304 Último mensaje 9 Julio 2010, 10:25 am
por do-while
Ayuda con la utilización del punto y coma
Foro Libre
Tokes 4 6,591 Último mensaje 13 Diciembre 2011, 04:29 am
por Unbr0ken
reemplazar la coma decimal por el punto decimal
Programación C/C++
niko26.m 2 4,113 Último mensaje 3 Agosto 2013, 03:06 am
por aguml
Poner coma en vez de un punto
.NET (C#, VB.NET, ASP)
Meta 2 3,063 Último mensaje 4 Abril 2022, 07:14 am
por Meta
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines