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

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Copiar contenido del fichero en otro en C (solucionado)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Copiar contenido del fichero en otro en C (solucionado)  (Leído 37,608 veces)
Pirata LOL

Desconectado Desconectado

Mensajes: 31



Ver Perfil
Copiar contenido del fichero en otro en C (solucionado)
« en: 7 Marzo 2011, 03:38 am »

sin usar cadenas.. el archivo 1 ya esta creado con contenido

llevo esta funcion y nose que hacer

Código
  1. void crear_datosout(void)
  2. {
  3. FILE *ptrdatos,*ptrdatos2;
  4. char caracter,caracter2;
  5. ptrdatos=fopen("archivo1.txt","rt");
  6. ptrdatos2=fopen("archivo2.txt","wt");
  7. while (caracter!=EOF)
  8. {
  9. if (caracter>=92 && <=122)
  10. {
  11. caracter=fgetc(ptrdatos);
  12. caracter2=caracter;
  13. fputc(caracter2,ptrdatos2);
  14. }
  15. fclose(archivo1);
  16. fclose(archivo2);
  17. }

que hago?? :-\


« Última modificación: 12 Marzo 2011, 05:03 am por Pirata LOL » En línea

[center[/center]
Akai


Desconectado Desconectado

Mensajes: 823



Ver Perfil
Re: Copiar contenido del fichero en otro en C
« Respuesta #1 en: 7 Marzo 2011, 23:26 pm »

Estás cometiendo un fallo. Tu únicamente consideras que vas a copiar letras. Pero y los espacios o saltos de linea? y otros caracteres especiales?

por otro lado, yo lo enfocaría más como un
do{
lo que sea
}while(tu verás)

Ya que de esta forma te aseguras que si el fichero estuviese vacío (sólo contuviese el final de fichero) copiases el final de fichero, o en un fichero no vacío, copiases también el final de fichero.


En línea

4rkn63l

Desconectado Desconectado

Mensajes: 199



Ver Perfil
Re: Copiar contenido del fichero en otro en C
« Respuesta #2 en: 8 Marzo 2011, 05:26 am »

A como dice Akai, estas pasando por alto los saltos de lineas, los espacios en blanco y mas importante aun el EOF. Si tu intencion es copiar solo letras del abecedario en todo caso seria comparar que el valor ascii es >=97 y no >=92 ya que si te fijas en la tabla ascii el valor 92 corresponde al caracter '\'.

En todo caso te dejo mi version del programa...tenia rato de no escribir codigo en C  :)

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.  
« Última modificación: 8 Marzo 2011, 05:35 am por 4rkn63l » En línea

Pirata LOL

Desconectado Desconectado

Mensajes: 31



Ver Perfil
Re: Copiar contenido del fichero en otro en C
« Respuesta #3 en: 10 Marzo 2011, 04:10 am »

ambos se equivocan o no se dieron cuenta.. eso que intentan corregirme ya lo pense y lo corregi en esto
Código:
if (caracter>=97 && <=122)

estoy utilizando la tabla ASCII y eso incluye solo las letras minusculas :)

pero probare el codigo de 4rkn63l luego de que arreglue un problema con el compilador de geany en windows gracias Luego respondo a ver si solucione el tema
« Última modificación: 10 Marzo 2011, 07:14 am por Pirata LOL » En línea

[center[/center]
4rkn63l

Desconectado Desconectado

Mensajes: 199



Ver Perfil
Re: Copiar contenido del fichero en otro en C
« Respuesta #4 en: 10 Marzo 2011, 08:05 am »

ambos se equivocan o no se dieron cuenta.. eso que intentan corregirme ya lo pense y lo corregi en esto
Código:
if (caracter>=97 && <=122)

omg....

Citar
Si tu intencion es copiar solo letras del abecedario en todo caso seria comparar que el valor ascii es >=97 y no >=92 ya que si te fijas en la tabla ascii el valor 92 corresponde al caracter '\'.
En línea

Akai


Desconectado Desconectado

Mensajes: 823



Ver Perfil
Re: Copiar contenido del fichero en otro en C
« Respuesta #5 en: 10 Marzo 2011, 09:56 am »

estoy utilizando la tabla ASCII y eso incluye solo las letras minusculas :)

Lo que te intenté decir, y veo que parece ser has obviado, es que estás ignorando los espacios, los saltos de linea, los números y todo lo que no sean letras.

La tabla ASCII incluye letras mayúsculas, minúsculas, números, y unos cuantos caracteres especiales que suman más que todos los anteriores juntos. Tu verás.

PD: Para Windows, posiblemente, te interese usar Code::Blocks (IDE) con mingw (compilador).
En línea

Pirata LOL

Desconectado Desconectado

Mensajes: 31



Ver Perfil
Re: Copiar contenido del fichero en otro en C
« Respuesta #6 en: 11 Marzo 2011, 02:19 am »

jeje 4rkn63l si leí tu comen sobre la corrección del if >=97  :-[
se me olvido agradecerte por esa parte... y Akai creo q tienes razon me podrias decir que hacer para que incluya todo? 2 ciclos? o que tipo de condicion  :-\
En línea

[center[/center]
Pirata LOL

Desconectado Desconectado

Mensajes: 31



Ver Perfil
Re: Copiar contenido del fichero en otro en C
« Respuesta #7 en: 11 Marzo 2011, 02:57 am »

ya arregle el compilador pero probe el codigo de 4rkn63l
y me dio muchos errores.. incontables  :silbar:
algunas duditas sobre tu codigo
Citar
int copy_file(char* f_org,char* f_dest);
int main()
{
   if(!copy_file("fichero1.txt","fichero2.txt"))
                printf("El fichero no se pudo copiar\n");
   else
           printf("Fichero copiado exitosamente\n");
 
   return 0;
}
:huh: esta parte del codigo la incluyo en la funcion principal? antes del menu? :huh:

void copy_file(void)
Citar
if(!(fp_org=fopen(f_org,"rt")) || !(fp_dest=fopen(f_dest,"wt")))

Código:
if(!(fp_org=fopen(f_org.txt,"rt")) || !(fp_dest=fopen(f_dest.txt,"wt")))
{
printf("Error de apertura de ficheros");
exit(EXIT_FAILURE);
}
le agregue el tipo de archivo al txt y use el printf :rolleyes:

Lo demás lo deje igual y aun así no copia me puedes decir si ya lo probaste? :huh:
y de ser así y te funcionó podrias decirme en que me equivoco??

Disculpen las molestias pero si no domino una simple copia de archivo no podre avanzar con ejercicios mas complejos y no es la idea  :-[
En línea

[center[/center]
4rkn63l

Desconectado Desconectado

Mensajes: 199



Ver Perfil
Re: Copiar contenido del fichero en otro en C
« Respuesta #8 en: 11 Marzo 2011, 06:50 am »

Citar
:huh: esta parte del codigo la incluyo en la funcion principal? antes del menu? :huh:

A que menu te refieres? Recuerda que la version de la funcion que hice yo, tiene distinta definicion tanto de parametros como de valor de retorno, asi que si lo que quieres es implementarla en el programa que estes realizando, deberas de copiar la declaracion(antes de main) y la definicion(despues de main) de la funcion y luego hacer la llamada a dicha funcion desde main, ahora si el programa que estas haciendo es solo para realizar la tarea de copiar los ficheros, pues ya tenes el programa completo ahi.

El programa lo compile en linux con gcc y anda bien...compilastes mi version del programa sin ningun cambio? Que errores te da?? Que compilador estas usando?
En línea

Akai


Desconectado Desconectado

Mensajes: 823



Ver Perfil
Re: Copiar contenido del fichero en otro en C
« Respuesta #9 en: 11 Marzo 2011, 11:12 am »

te lo pongo en pseudocódigo, a partir de ahi ya te apañas tu

Código:
f1=abrir_fichero(1.lectura)
f2=abrir_fichero(2,esctritura)

do{
c=leer_caracter(1)
escribir_caracter(2,c)
}while(c!=EOF)

cerrar_fichero(1)
cerrar_fichero(2)
En línea

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

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines