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

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Duplicar un archivo de texto plano con lenguaje C.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Duplicar un archivo de texto plano con lenguaje C.  (Leído 2,902 veces)
DanielPy

Desconectado Desconectado

Mensajes: 145



Ver Perfil
Duplicar un archivo de texto plano con lenguaje C.
« en: 3 Marzo 2015, 17:22 pm »

Hola gente.
La lógica es que consultemos cuando un programa no funciona por algún error de sintaxis o lógica, en este caso es algo distinto porque como algunos conocen por mi edad no tengo otra posibilidad de consulta que no sean los foros.-
El caso es, alguien me puede decir si esta es una manera correcta de duplicar un archivo, me refiero a fgets y fputs, con estas 2 funciones tengo la seguridad de que no voy a tener problema para leer y escribir contenga lo que contenga un archivo con texto plano ?.- 

Código
  1. /* Programa para copiar un archivo en otro*/
  2. #include <stdio.h>
  3.  
  4. int main(){
  5. char temp[100];
  6. FILE *ptrOrigen = fopen( "cliente.txt", "r");
  7. FILE *ptrCopia  = fopen( "clienteCopia", "w");
  8.  
  9. if( ptrOrigen == NULL || ptrCopia == NULL ){
  10. printf(" \n\n Error al abrir ficheros... ");
  11. }
  12. else{
  13. printf( "\n Se muestra el archivo copiado...\n\n" );
  14. while( fgets( temp, 100, ptrOrigen) ){
  15. fputs( temp, ptrCopia );
  16. printf( " %s", temp );
  17. }
  18. }
  19.  
  20. fclose(ptrOrigen);
  21. fclose(ptrCopia);
  22.  
  23. return 0;
  24. }
  25.  

Desde ya muchas gracias por la ayuda que deseen brindarme.-
Saludos.
Daniel


En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor
y cuando lo abrazas dejan de causar dolor.-
engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Duplicar un archivo de texto plano con lenguaje C.
« Respuesta #1 en: 3 Marzo 2015, 17:36 pm »

cual error te da?


En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Duplicar un archivo de texto plano con lenguaje C.
« Respuesta #2 en: 4 Marzo 2015, 03:00 am »

alguien me puede decir si esta es una manera correcta de duplicar un archivo
El programa debe funcionar correctamente, solo un detalle: si alguna de las aperturas de archivo falla terminaras llamando a la función fclose con su argumento igual a NULL y eso no lo define el lenguaje (comportamiento no definido).

Para solucionarlo antes de llamar a fclose verifica el valor de su argumento mediante una sentencia condicional:
Código
  1. if (ptrOrigen != NULL)
  2.   fclose (ptrOrigen);
  3. if (ptrCopia != NULL)
  4.   fclose (ptrCopia);

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
DanielPy

Desconectado Desconectado

Mensajes: 145



Ver Perfil
Re: Duplicar un archivo de texto plano con lenguaje C.
« Respuesta #3 en: 4 Marzo 2015, 15:30 pm »

Hola.
angel lex, no te respondí porque me pareció que estaba muy claro cuál era mi consulta.-
rir3760, te dejo un programita que arme con datos obtenidos en la web porque me pareció interesante para leer un archivo como el siguiente:

campo1:2:campo3
campo4:5:campo6


Código
  1. #include <stdio.h>
  2.  
  3. int main(void){
  4. char campoUno[100], campoTres[100];
  5. int campoDos = 0;
  6.  
  7. FILE *ptrBdd = fopen("datos.txt", "r");
  8. if( ptrBdd == NULL){
  9. printf( "\n\n Error al intentar abrir archivo..." );
  10. }
  11. else{
  12. while( !feof(ptrBdd) ){
  13. fscanf( ptrBdd, "%[a-z0-9]:%d:%[a-z0-9]\n", campoUno, &campoDos, campoTres );
  14. printf( "%s %d %s\n", campoUno, campoDos, campoTres);
  15. }
  16. fclose(ptrBdd);
  17. }
  18.  
  19.  
  20. return 0;
  21. }
  22.  

La consulta es. ¿es correcto poner el cierre del archivo dentro del else? ¿ o tengo que cerrarlo con el condicional if?

Saludos.
Daniel
« Última modificación: 4 Marzo 2015, 16:29 pm por DanielC# » En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor
y cuando lo abrazas dejan de causar dolor.-
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Duplicar un archivo de texto plano con lenguaje C.
« Respuesta #4 en: 4 Marzo 2015, 16:41 pm »

¿es correcto poner el cierre del archivo dentro del while()? ¿ o tengo que cerrarlo con el condicional if?
El programa tal como esta funciona correctamente:
A) Si la apertura del archivo falla no es necesario cerrarlo.
B) Si la apertura del archivo es exitosa este se cierra después del bucle while.

Un detalle es la especificación de rangos en la forma "a-z" ya que estos dependen del compilador utilizado, otro mas es la falta de validaciones mas el uso de feof para controlar el bucle. Para el caso es mejor:
Código
  1. if ( ptrBdd == NULL) {
  2.   perror("datos.txt");
  3. }else {
  4.   while (fscanf(ptrBdd, " %[^:]:%d:%s", campoUno, &campoDos, campoTres) == 3)
  5.      printf( "%s %d %s\n", campoUno, campoDos, campoTres);
  6.   fclose (ptrBdd);
  7. }

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
DanielPy

Desconectado Desconectado

Mensajes: 145



Ver Perfil
Re: Duplicar un archivo de texto plano con lenguaje C.
« Respuesta #5 en: 5 Marzo 2015, 03:44 am »

Hola a todos.
rir3760 créeme que desde que pusiste tu último post y hasta este momento que son las 23.36 (Argentina) que estuve buscando casi sin cesar que significaba el == 3 que parece tener relación con el bucle while pero no logro encontrar la explicación, ni siquiera el archivo tiene 3 renglones de 3 campo cada uno (tiene 2), ¿me lo podrías aclarar ?.- :huh: :huh: :huh: 

Saludos y gracias por tú tiempo.
Daniel
En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor
y cuando lo abrazas dejan de causar dolor.-
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Duplicar un archivo de texto plano con lenguaje C.
« Respuesta #6 en: 5 Marzo 2015, 15:27 pm »

Las funciones fscanf, scanf y sscanf retornan el numero de conversiones realizadas con éxito. La condición del bucle:
Código
  1. while (fscanf(ptrBdd, " %[^:]:%d:%s", campoUno, &campoDos, campoTres) == 3)
  2.   printf( "%s %d %s\n", campoUno, campoDos, campoTres);
  3. fclose (ptrBdd);
Compara el resultado de fscanf con el valor tres porque este es el numero de conversiones que debe realizar la función al leer cada registro. En otras palabras "Mientras se lean con éxito los tres campos que componen un registro ellos se imprimen en la salida estándar".

Si no tienes una referencia de la biblioteca estándar de C dos (en ingles) que puedes utilizar son:
Plauger C90 Reference
C Plus Plus: scanf

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
Convertir HTML a Texto Plano
Java
Blitzkrieg' 2 8,568 Último mensaje 1 Abril 2010, 17:25 pm
por Blitzkrieg'
Codificacion de texto plano
Programación C/C++
ixak1 3 2,479 Último mensaje 21 Junio 2012, 20:19 pm
por ixak1
Problema con caracteres especiales al guardar archivo de texto plano
PHP
Crazy.sx 2 3,812 Último mensaje 27 Abril 2013, 06:12 am
por Crazy.sx
Grabar estructura en archivo [lenguaje C] [Windows 7] « 1 2 »
Programación C/C++
DanielPy 12 5,595 Último mensaje 14 Marzo 2015, 04:25 am
por rir3760
Leer todas las filas de un archivo de texto plano usando XSLT en Java
Java
Lind L. Tailor 0 1,979 Último mensaje 17 Marzo 2015, 23:42 pm
por Lind L. Tailor
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines