Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Urgente por favor ayudenme!!

Estas en el tema de Urgente por favor ayudenme!! en el foro de C/C++ en Foros del Web. hola que tal amigos me mandaron a hacer un programa en la universidad de manejo de archivos y no me sale aqui esta el enunciado ...
  #1 (permalink)  
Antiguo 01/10/2010, 18:45
 
Fecha de Ingreso: septiembre-2010
Mensajes: 16
Antigüedad: 13 años, 7 meses
Puntos: 0
Urgente por favor ayudenme!!

hola que tal amigos me mandaron a hacer un programa en la universidad de manejo de archivos y no me sale aqui esta el enunciado y mi codigo

"Escriba un programa en C que le permita al usuario actualizar una fila determinada de un archivo. El usuario deberá indicar el número de la fila por teclado y el texto por el cual desea reemplazar el contenido actual."

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. void validar(FILE*archivo2)
  5.       {
  6.     char caracter[80];
  7.     int a=0;
  8.     archivo2= fopen("actualizar.txt","a");
  9.     if(archivo2==NULL)
  10.     {
  11.     system("CLS");
  12.     printf("error");
  13.     system("pause>nul");    
  14.     exit(1);    
  15.     }else
  16.     {
  17.     system("CLS");
  18.     printf("succes");
  19.     system("pause>nul");    
  20.     }    
  21.            
  22.       }
  23. //----------------------------------------------------------------------------------------------------------------------------              
  24. void leer()
  25.    {
  26.       FILE *archivo;    
  27.       char caracter[80];
  28.       int a=0;
  29.       char c;
  30.       archivo=fopen("actualizar.txt","r+");  
  31.       if(feof(archivo)!=0){system("CLS");system("pause>nul");printf("no se encontro el final");exit(1);}
  32.       while(feof(archivo)==0)
  33.                              {
  34.                              
  35.                               fgets(caracter,80,archivo);
  36.                               printf("%s",caracter);
  37.                               }
  38.       fclose(archivo);
  39.       }
  40. //----------------------------------------------------------------------------------------------------------------------------  
  41. void parametros_incorrectos()
  42.                    {
  43.                    system("CLS");
  44.                    printf("Parametros incorrectos");
  45.                    system("pause>nul");          
  46.                              
  47.                    }
  48. //------------------------------------------------------------------------------------------------------------------------------
  49. void final()
  50.     {
  51.     system("CLS");
  52.     printf("GRACIAS POR UTILIZAR ESTE PROGRAMA VUELVA PRONTO");                                                                                                                    
  53.     system("pause>nul");
  54.     exit(1);
  55.                                                                                                                        
  56.                                                                                                                        
  57.     }
  58. //-------------------------------------------------------------------------------------------------------------------------------
  59.  
  60. int main(int argc, char *argv[])
  61. {
  62. system("color 0b");
  63. //----------------------variables------------------------
  64. FILE *archivo;
  65. FILE *archivo2;
  66. archivo=fopen("actualizar.txt","a");
  67. archivo2=fopen("buffer.txt","a");
  68. int op=0;
  69. int op2=0;
  70. int a=0;
  71. char texto[255];
  72. char texto2[255];
  73. //-------------------------------------------------------
  74. validar(archivo);
  75. do
  76. {
  77. system("CLS");
  78. printf("\n-------------------BIENVENIDOS AL PROGRAMA QUE ACTUALIZA LINEAS-------------------\n");
  79. printf("EL texto original dice:\n\n");
  80. leer(archivo);  
  81. printf("\n\nEscoja una opcion:");
  82. printf("\n1.Ingresar fila a sustituir");
  83. printf("\n2.Salir");
  84. printf("\nSu opcion elegida fue:");
  85. fflush(stdin);
  86. scanf ("%d",&op);
  87. fflush(stdin);  
  88. switch(op)
  89.   {
  90.   case 1:
  91.          printf("\nEditara la fila nro.");
  92.          scanf ("%d",&op2);
  93.          printf("\nTexto que desea incluir:\n");
  94.          scanf ("%s",&texto);
  95.          gets(texto2);
  96.          //printf("%s",texto2);
  97.          fputs(texto2,archivo2);
  98.          while(feof(archivo)==0)
  99.                                 {
  100.                                 fgets(texto,100,archivo);
  101.                                 a++;
  102.                                 if(a==op2)
  103.                                           {
  104.                                           fgets(texto,100,archivo2);
  105.                                           strcpy(texto2,fgets(texto,100,archivo2));
  106.                                           fprintf(archivo,"%s",texto2);  
  107.                                           }                
  108.                                 }
  109.   leer(archivo);
  110.   fclose(archivo);
  111.   fclose(archivo2);
  112.   system("pause>nul");
  113.   break;
  114.   case 2:
  115.          final();
  116.   break;
  117.   default:
  118.          parametros_incorrectos();
  119.   break;    
  120.   }  
  121. }while(op!=2);
  #2 (permalink)  
Antiguo 01/10/2010, 20:29
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Urgente por favor ayudenme!!

Hay cosas que estas haciendo mal. Fijate, en la variable texto guardas la linea a incluir. Pero cuando entras en el while lees desde el archivo y lo almacenas en esta misma variable.

No he logrado entender la logica de tu programa.

Te comento un poco mas o menos como seria:

Leer una linea hasta que se acabe el archivo
si numero de linea es distinto al numero deciado, pego la linea leida en un nuevo archivo. si son iguales no hago nada.
  #3 (permalink)  
Antiguo 02/10/2010, 13:10
 
Fecha de Ingreso: septiembre-2010
Mensajes: 16
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Urgente por favor ayudenme!!

no me ha funcionado bien men a los mejor no estoy haciendo algo bien
  #4 (permalink)  
Antiguo 02/10/2010, 13:11
 
Fecha de Ingreso: septiembre-2010
Mensajes: 16
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Urgente por favor ayudenme!!

Cita:
Iniciado por sam90 Ver Mensaje
Hay cosas que estas haciendo mal. Fijate, en la variable texto guardas la linea a incluir. Pero cuando entras en el while lees desde el archivo y lo almacenas en esta misma variable.

No he logrado entender la logica de tu programa.

Te comento un poco mas o menos como seria:

Leer una linea hasta que se acabe el archivo
si numero de linea es distinto al numero deciado, pego la linea leida en un nuevo archivo. si son iguales no hago nada.
me he intentado eso y nada fijate en mi codigo

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. void validar(FILE*archivo2)
  5.       {
  6.     char caracter[80];
  7.     int a=0;
  8.     archivo2= fopen("actualizar.txt","r+");
  9.     if(archivo2==NULL)
  10.     {
  11.     system("CLS");
  12.     printf("error");
  13.     system("pause>nul");    
  14.     exit(1);    
  15.     }else
  16.     {
  17.     system("CLS");
  18.     printf("succes");
  19.     system("pause>nul");    
  20.     }    
  21.            
  22.       }
  23. //----------------------------------------------------------------------------------------------------------------------------              
  24. void leer()
  25.    {
  26.       FILE *archivo;    
  27.       char caracter[80];
  28.       int a=0;
  29.       char c;
  30.       archivo=fopen("actualizar.txt","r");  
  31.       if(feof(archivo)!=0){system("CLS");system("pause>nul");printf("no se encontro el final");exit(1);}
  32.       while(feof(archivo)==0)
  33.                              {
  34.                               printf("\nLinea %d:\n",a);
  35.                               fgets(caracter,80,archivo);
  36.                               printf("%s",caracter);
  37.                               a++;
  38.                               }
  39.       fclose(archivo);
  40.       }
  41. //----------------------------------------------------------------------------------------------------------------------------  
  42. void parametros_incorrectos()
  43.                    {
  44.                    system("CLS");
  45.                    printf("Parametros incorrectos");
  46.                    system("pause>nul");          
  47.                              
  48.                    }
  49. //------------------------------------------------------------------------------------------------------------------------------
  50. void final()
  51.     {
  52.     system("CLS");
  53.     printf("GRACIAS POR UTILIZAR ESTE PROGRAMA VUELVA PRONTO");                                                                                                                    
  54.     system("pause>nul");
  55.     exit(1);
  56.                                                                                                                        
  57.                                                                                                                        
  58.     }
  59.  
  60. //-------------------------------------------------------------------------------------------------------------------------------
  61. int main(int argc, char *argv[])
  62. {
  63. system("color 0b");
  64. //----------------------variables------------------------
  65. FILE *archivo;
  66. FILE *archivo2;
  67. archivo=fopen("actualizar.txt","r+");
  68. archivo2=fopen("buffer.txt","w+");
  69. int op=0;
  70. int op2=0;
  71. int a=0;
  72. char texto[255];
  73. char caracter[80];
  74. char caracter2[80];
  75. //-------------------------------------------------------
  76. validar(archivo);
  77. do
  78. {
  79. system("CLS");
  80. printf("\n-------------------BIENVENIDOS AL PROGRAMA QUE ACTUALIZA LINEAS-------------------\n");
  81. printf("EL texto original dice:\n");
  82. leer(archivo);  
  83. printf("\n\nEscoja una opcion:");
  84. printf("\n1.Ingresar fila a sustituir");
  85. printf("\n2.Salir");
  86. printf("\nSu opcion elegida fue:");
  87. fflush(stdin);
  88. scanf ("%d",&op);
  89. fflush(stdin);  
  90. switch(op)
  91.   {
  92.   case 1:
  93.          printf("\nEditara la fila nro.");
  94.          scanf ("%d",&op2);
  95.          printf("\nTexto que desea incluir:\n");
  96.          scanf ("%s",&texto);
  97.          fputs(texto,archivo2);
  98.          printf("\n\nNuevo texto:\n");
  99.          if(feof(archivo)!=0){system("CLS");system("pause>nul");printf("no se encontro el final");exit(1);}
  100.        
  101.          do
  102.              {
  103.                
  104.                if(a!=op2)
  105.                        {
  106.                        
  107.                        fputs(texto,archivo2);
  108.                        }    
  109.                
  110.                
  111.                fgets(caracter,80,archivo);
  112.                printf("%s",caracter);
  113.                a++;  
  114.                      
  115.              
  116.               }while(feof(archivo)==0);
  117.        
  118.  
  119.   fclose(archivo);
  120.  fclose(archivo2);
  121.   system("pause>nul");
  122.   break;
  123.   case 2:
  124.          final();
  125.   break;
  126.   default:
  127.          parametros_incorrectos();
  128.   break;    
  129.   }  
  130. }while(op!=2);  
  131. }
men espero que te haya quedado un poquito mas claro mi codigo
  #5 (permalink)  
Antiguo 02/10/2010, 15:26
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Urgente por favor ayudenme!!

Primero de todo: scanf ("%s",&texto); en esa expresion no va el "&" ya que texto por si solo es un puntero. Osea que estabas tomando mal el dato a ingresar.

Código C++:
Ver original
  1. do
  2.              {
  3.                
  4.                if(a!=op2)
  5.                        {
  6.                        
  7.                        fputs(texto,archivo2);
  8.                        }    
  9.                
  10.                
  11.                fgets(caracter,80,archivo);
  12.                printf("%s",caracter);
  13.                a++;  
  14.                      
  15.              
  16.               }while(feof(archivo)==0);

Fijate que ahi pones el texto que ingresaste cada vez que a distinto a op2, osea que estarias cambiando todas las filas menos uno.

Código C++:
Ver original
  1. do
  2.              {
  3.                fgets(caracter,80,archivo);
  4.                if(a==op2)
  5.                        fputs(texto,archivo2);
  6.                else    
  7.                          fputs(caracter,archivo2);
  8.                
  9.  
  10.                a++;  
  11.               }while(feof(archivo)==0);

Etiquetas: favor
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:33.