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

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Programa para copiar una palabra
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Programa para copiar una palabra  (Leído 2,542 veces)
TonietFB

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Programa para copiar una palabra
« en: 16 Noviembre 2014, 22:53 pm »

Hola a todos! Mirar tengo un problemilla. Tengo el código siguiente, que funciona perfectamente, que lo que hace es copiar un archivo .txt en otro nuevo, letra por letra.

La cosa es que yo quiero que me copie solo una palabra, localizada en un punto. ¿Como puedo hacerlo? Llevo días probando y nada. Soy un poco novatillo en esto, y agradecería mucho algo de ayuda.

Mi archivo .txt es algo así

[1]
10442021
8483689
[2]
be7      Cosmico              8.39e-002      1.22e-002     2.09e-002    10 
bi212    SerieTh232Rn220      1.32e+002      2.54e-001     4.16e-001    14 
[3]
be7      10   464.4   467.4   477.6     7.6    461   525    26.5     12352.0 Cosmico             
bi212    14   732.2   735.2   730.4     9.6    696   769    25.3    887251.3 SerieTh232Rn220     
[4]
 1   119.9   122.9   122.9     2.2    114   133     8.9     90248.9
 2   147.7   150.7   150.5     2.9    136   158     8.4    121760.3
 3   176.3   179.3   179.0     3.1    161   185     8.6    202054.9
 8   305.3   308.3   307.0     5.4    282   327    10.6    218150.5
 9   404.4   407.4   418.6    15.5    375   459    38.5    308035.7
16   875.6   878.6   875.1     8.9    842   893    19.7     35045.8
[5]

Y yo quiero que me saque de esta linia "bi212    SerieTh232Rn220      1.32e+002      2.54e-001     4.16e-001    14" el primer número, es decir que en el fichero de salida aparezca "1.32e+002"

Gracias de antemano!

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. /*copy_file recibe como parametro el nombre del fichero origen y el nombre del fichero destino
  4. donde se copiara, devuelve 1 si se copio exitosamente,0 en caso contario*/
  5. int copy_file(char* f_org,char* f_dest);
  6. int main()
  7. {
  8. if(!copy_file("fichero1.txt","fichero2.txt"))
  9.                printf("El fichero no se pudo copiar\n");
  10. else
  11.        printf("Fichero copiado exitosamente\n");
  12.  
  13. return 0;
  14. }
  15. int copy_file(char* f_org,char* f_dest)
  16. {
  17. FILE *fp_org,*fp_dest;
  18. char c;
  19.  
  20. if(!(fp_org=fopen(f_org,"rt")) || !(fp_dest=fopen(f_dest,"wt")))
  21. {
  22. perror("Error de apertura de ficheros");
  23. exit(EXIT_FAILURE);
  24. }
  25.  
  26. while((c=fgetc(fp_org))!=EOF && !ferror(fp_org) && !ferror(fp_dest))
  27. fputc(c,fp_dest);
  28.  
  29. if(ferror(fp_org) || ferror(fp_org))
  30. return 1;
  31.  
  32. fclose(fp_org);
  33. fclose(fp_dest);
  34. return 0;
  35. }
  36.  


En línea

patilanz


Desconectado Desconectado

Mensajes: 481

555-555-0199@example.com


Ver Perfil WWW
Re: Programa para copiar una palabra
« Respuesta #1 en: 16 Noviembre 2014, 23:02 pm »

Puedes hacer una especie de contador variable que cuente los \n encontrados para las nuevas lineas, necesitas 4 después obtienes la linea y lo divides según los espacios.
Para dividir utiliza strtok()

http://www.cplusplus.com/reference/cstring/strtok/
http://codigomaldito.blogspot.com.es/2005/11/dividir-en-tokens-o-palabras-con.html

Saludos


« Última modificación: 16 Noviembre 2014, 23:04 pm por patilanz » En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Programa para copiar una palabra
« Respuesta #2 en: 17 Noviembre 2014, 02:20 am »

Y yo quiero que me saque de esta linia "bi212    SerieTh232Rn220      1.32e+002      2.54e-001     4.16e-001    14" el primer número, es decir que en el fichero de salida aparezca "1.32e+002"
¿Buscas la primera linea que inicia literalmente con "bi212    SerieTh232Rn220" y extraer el numero de punto flotante a continuación de esta? Si es así puedes utilizar la función fgets para leer el archivo linea por linea junto con sscanf para verificar si esta cumple con el formato esperado.

Si no es así entonces por favor indica a detalle cual es la estructura del archivo de entrada.

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
TonietFB

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: Programa para copiar una palabra
« Respuesta #3 en: 17 Noviembre 2014, 07:39 am »

Si, eso mismo busco. Pero no estan separados por un solo espacio cada una de las palabras.
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Programa para copiar una palabra
« Respuesta #4 en: 17 Noviembre 2014, 17:28 pm »

Como ya te comente debes leer el archivo linea por linea (mediante fgets) verificando (mediante sscanf) si esta cumple con el formato buscado, si eso sucede terminas el bucle de inmediato. Mas o menos así:
Código
  1. FILE *in;
  2. char linea[MAX_CHARS];
  3. double num;
  4.  
  5. /* ... */
  6.  
  7. while (fgets(linea, MAX_CHARS, in) != NULL)
  8.   if (sscanf(linea, " bi212    SerieTh232Rn220 %lf", &num) == 1)
  9.      break;
  10.  
  11. if (feof(in)){
  12.   /* Fin de archivo ==> No se encontro la linea */
  13. }else if (ferror(in)){
  14.   /* Error en la lectura del archivo */
  15. }else {
  16.   printf("%e\n", num);
  17. }
  18.  
  19. /* ... */

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
[MOD] Existe algun programa..... para copiar dvd?
Multimedia
arbeluc 2 2,919 Último mensaje 26 Octubre 2004, 11:17 am
por Songoku
[MOD] Aconsejarme programa para copiar DVD.
Multimedia
dani99 4 3,246 Último mensaje 13 Febrero 2005, 06:20 am
por dani99
programa para copiar dvd
Software
arcochay 3 5,079 Último mensaje 30 Diciembre 2006, 17:50 pm
por *StoW*
programa para desordenar una palabra pudiendose leer, ayuda « 1 2 »
Java
casidus 13 16,347 Último mensaje 21 Febrero 2010, 21:51 pm
por sapito169
copiar una palabra de un archivo en C « 1 2 »
Programación C/C++
FR-32 11 4,993 Último mensaje 14 Marzo 2014, 05:34 am
por FR-32
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines