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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  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 11,989 veces)
fafafa01

Desconectado Desconectado

Mensajes: 82


Ver Perfil
Re: Cambiar coma por punto en un archivo .txt
« Respuesta #10 en: 17 Mayo 2016, 01:39 am »

muchas gracias, me funciono perfecto.

¿sabes porque es necesario colocar fflush? estuve viendo y esta función lo que hace es borrar el buffer creo.

¿si la lectura y escritura es sobre una pantalla también se debe hacer?

 y la ultima, ¿porque, en el ejemplo que vimos  hay que retroceder un byte de la posición actual? si técnicamente el puntero esta apuntando al caracter que queremos cambiar.

saludos.

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

fafafa01

Desconectado Desconectado

Mensajes: 82


Ver Perfil
Re: Cambiar coma por punto en un archivo .txt
« Respuesta #11 en: 17 Mayo 2016, 02:18 am »

otra duda, al final el código lo tuve que cambiar, porque solo en la primer linea me imprimía bien, quedaba así:
12,345
23.,456
56.,678


Código:
#include <stdio.h>
#include <stdlib.h>

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

archivo=fopen("datalog1","r+");
if (archivo == NULL){

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

igualmente tampoco anda a la perfección, los últimos números tampoco los imprime bien, no se si sera porque el archivo es muy grande o que (el archivo es de 1600 lineas aprox)


En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Cambiar coma por punto en un archivo .txt
« Respuesta #12 en: 17 Mayo 2016, 02:21 am »

fflush vacía el buffer, que vienen siendo 2 pasos: Primero, enviar los datos a su destino (el archivo en este caso), y segundo, limpiarlo. Para evitar que vaya lento, cada operación como fputc en evz de escribir al archivo, lo va almacanando en el buffer. Con fflush, grabamos lo almacenado.

Si es sobre pantalla también se debe? Pues según. Si vas a pedir entrada al usuario, generalmente el fflush no es necesario, se hace automáticamente. Pero si vas a tener a tu programa trabajando continuamente (Por ejemplo, listando todos lso archivos de una carpeta), entonces sí es preferible ahcer fflush. Pero no cadaescritura, sino cada "bloque" de texto qeu quieras que salga junto a la pantalla. Pero por lo general, no será necesario. Eso sí, si en algún momento ves que no sale texto por pantalla que debería salir, prueba poniendo flush.

Tanto fputc como fgetc avanza 1 posición en el archivo. Cuando fgetc() retorna ',', ya no está en ese caracter, sino en el siguiente. Entonces, retrocedes uno, y lo reescribes con fputc.

Con respecto a lo que acabas de comentar, ¿qué te genera el código que puse antes?
En línea

fafafa01

Desconectado Desconectado

Mensajes: 82


Ver Perfil
Re: Cambiar coma por punto en un archivo .txt
« Respuesta #13 en: 17 Mayo 2016, 03:05 am »

con tu codigo
esta así:
0.0000
77.725
146.327
199.039
230.767
235.482
215.951
171.428
108.204
34.306
-44.094
-118.699
-178.576


queda así:
0,0000
77.,725
146.,327
199.,039
230.,767
235.,482
215.,951
171.,428
108.,204
34.,306
-44.,094
-118.,699
-178.,576

y en las ultimas lineas simplemente no modifica nada

tengo que aclarar que el archivo no es .txt sino que es un archivo de texto que no tiene especificado el tipo de archivo que es. obviamente no le puse "asd.txt" sino simplemente "asd" (aunque no se si esta bien).
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Cambiar coma por punto en un archivo .txt
« Respuesta #14 en: 17 Mayo 2016, 13:25 pm »

Extraño. ¿Usas Windows, Linux?
En línea

fafafa01

Desconectado Desconectado

Mensajes: 82


Ver Perfil
Re: Cambiar coma por punto en un archivo .txt
« Respuesta #15 en: 17 Mayo 2016, 14:37 pm »

windows uso

Extraño. ¿Usas Windows, Linux?
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


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

Utiliza este código:
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. printf("%i ", ftell(archivo));
  17. fseek(archivo, -1, SEEK_CUR);
  18. printf("%i ", ftell(archivo));
  19. fputc('.',archivo);
  20. fflush(archivo);
  21. printf("%i\n", ftell(archivo));
  22. }
  23. c=fgetc(archivo);
  24. }
  25. }
  26. fclose(archivo);
  27. }

Le añadí unos printf para comprobar que la posición del cursor varíe correctamente.
Te debería salir por pantalla los valores:
"N N-1 N"
En línea

fafafa01

Desconectado Desconectado

Mensajes: 82


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

pone números como vos decís:" N N-1 N ", pero no se detiene nunca.
empieza con "11 10 11"
En línea

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

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Punto y coma
Programación C/C++
@synthesize 4 3,672 Ú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,929 Ú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,499 Ú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,462 Último mensaje 4 Abril 2022, 07:14 am
por Meta
Voy a enseñar a programar a mi sobrino [solucionado] me faltaba el punto y coma despues de instanciar
PHP
enrique4480 4 5,120 Último mensaje 26 Julio 2024, 01:52 am
por enrique4480
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines