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

Contar los registros marcados para borrar [C]

Estas en el tema de Contar los registros marcados para borrar [C] en el foro de C/C++ en Foros del Web. Hola Gente. Estoy en el tema archivos con el manual con el que estoy estudiando y no puedo resolver como contar los registros marcados para ...
  #1 (permalink)  
Antiguo 23/03/2015, 16:41
rdv316
Invitado
 
Mensajes: n/a
Puntos:
Contar los registros marcados para borrar [C]

Hola Gente.
Estoy en el tema archivos con el manual con el que estoy estudiando y no puedo resolver como contar los registros marcados para borrar, dejo el código fuente para que lo vean, el mismo no me da error, lo que deseo es que me ayuden a construir una función para contar registros, si bien me faltan muchas cosas por hacer lo que quiero es ir por orden.-

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <windows.h>
  4.  
  5. typedef struct{
  6.     char marcado;
  7.     char ingles[30];
  8.     char espaniol[30];
  9. }Traductor;
  10.  
  11. void cRegistros(Traductor *ptrTrad, int *ptrRegistros);
  12. void mainMenu(int *ptrOpcMm, int *ptrRegistros);
  13.  
  14. int main(int argc, char *argv[]){
  15.     int opcMm, registros;
  16.     Traductor trad;
  17.    
  18.     cRegistros(&trad, &registros);
  19.     mainMenu(&opcMm, &registros);
  20.    
  21.     return 0;
  22. }
  23.  
  24. void cRegistros(Traductor *ptrTrad, int *ptrRegistros){
  25.     FILE *ptrTraductor;
  26.     long tam;
  27.  
  28.     if(( ptrTraductor = fopen( "traductor.txt", "r" )) == NULL ){
  29.         printf( "\n\n ERROR, no se pudo leer desde el archivo..." );
  30.     }
  31.     else{
  32.         tam=sizeof(*ptrTrad);
  33.         fseek(ptrTraductor, 0, SEEK_END);
  34.         *ptrRegistros=ftell(ptrTraductor)/tam; 
  35.    
  36.        
  37.        
  38.         fclose(ptrTraductor);
  39.     }
  40. }
  41.  
  42.  
  43. void mainMenu(int *ptrOpcMm, int *ptrRegistros){
  44.     int ok=1, ch;
  45.    
  46.     while(ok){
  47.         do{
  48.             system( "cls" );
  49.             printf( "\n ============================" );
  50.             printf( "\n       MENU PRINCIPAL");
  51.             printf( "\n ============================" );
  52.             printf( "\n 1 - Alta");
  53.             printf( "\n 2 - Modificaci%cn", 162);
  54.             printf( "\n 3 - Baja");
  55.             printf( "\n 4 - Buscar");
  56.             printf( "\n 5 - Listado ----------------> %d-registro(s)", *ptrRegistros);
  57.             printf( "\n 6 - Marcados paras borrar --> 0-registro(s)");
  58.             printf( "\n 7 - Empaquetar tabla");
  59.             printf( "\n 8 - Finalizar");
  60.        
  61.             if(*ptrRegistros == 0){
  62.                 printf( "\n\n ============================================" );
  63.                 printf( "\n No cuenta con registros.");
  64.                 printf( "\n Opciones ==> Alta y Finalizar");
  65.                 printf( "\n ============================================" );
  66.             }else if(*ptrRegistros == 1){
  67.                 printf( "\n\n ============================================" );
  68.                 printf( "\n cuenta con 1 solo registro");
  69.                 printf( "\n Opciones ==> Alta - Modificaci%cn - Baja y Finalizar", 162);
  70.                 printf( "\n ============================================" );
  71.             }else{
  72.                 printf( "\n ============================" );
  73.             }
  74.        
  75.             printf( "\n\n Ingrese opci%cn............: ", 162);
  76.             ok = scanf( "%d", ptrOpcMm ) == 1 && *ptrOpcMm >= 1 && *ptrOpcMm <= 8;
  77.             while ((ch = getchar()) != EOF && ch != '\n');
  78.         }while(!ok);
  79.  
  80.         ok = 0;
  81.    
  82.         switch(*ptrOpcMm){
  83.             case 1 :
  84.                 break;
  85.             case 2 :
  86.                 if(*ptrRegistros >= 1){
  87.                 }
  88.                 else{ok = 1;}
  89.                 break;
  90.             case 3 :
  91.                 if(*ptrRegistros >= 1){
  92.                 }
  93.                 else{ok = 1;}
  94.                 break;
  95.             case 4 :
  96.                 if(*ptrRegistros >= 2){
  97.                 }
  98.                 else{ok = 1;}
  99.                 break;
  100.             case 5 :
  101.                 if(*ptrRegistros >= 2){
  102.                 }
  103.                 else{ok = 1;}
  104.                 break;
  105.             case 6 :
  106.                 break;
  107.             case 7 :
  108.                 break;
  109.             case 8 :
  110.                 break;
  111.         }
  112.     }
  113. }

Desde ya muchas gracias por ocuparse.-
Saludos.
Daniel
  #2 (permalink)  
Antiguo 24/03/2015, 01:56
 
Fecha de Ingreso: julio-2012
Mensajes: 133
Antigüedad: 11 años, 9 meses
Puntos: 22
Respuesta: Contar los registros marcados para borrar [C]

Hola Daniel.
Cita:
Iniciado por rdv316 Ver Mensaje
... no puedo resolver como contar los registros marcados para borrar...
Podrías hacer:
Código C:
Ver original
  1. int aserborrados(char *filename) {
  2.   Traductor tr;
  3.   FILE *fp;
  4.   int count = 0;
  5.  
  6.   if((fp = fopen(filename, "rb" )) == NULL ) {
  7.     perror( "Error" );
  8.     return -1;
  9.   }
  10.  
  11.   while (fread(&tr, sizeof(tr), 1, fp))
  12.     count += tr.marcado == 'X' ? 1 : 0;
  13.  
  14.   fclose(fp);
  15.   return count;
  16. }
(para el ejemplo usé arbitrariamente el caracter 'X' para marcar los que serán borrados)

Ejemplo de uso:
Código C:
Ver original
  1. ...
  2. {
  3.  int aborrar;
  4.  
  5.     aborrar = aserborrados(NOMARCH); // (NOMARCH = nombre del archivo)
  6.     if (aborrar != -1)
  7.       printf("Cantidad de registros a ser borrados: %d", aborrar);
  8.   ...

Saludos.
  #3 (permalink)  
Antiguo 24/03/2015, 06:34
rdv316
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Contar los registros marcados para borrar [C]

Hola ecfisa.
Muchas gracias por ocuparte, descarto que tú ej. me va a funcionar, lo que pasa es que ahora mismo descubro que no puedo implementarlo porque no puedo ingresar datos al archivo y en el mismo programa leerlos, creí que lo tenía claro pero parece que no.-
Voy a seguir leyendo y practicando para ver cuál es el error.-

Saludos.
Daniel

Etiquetas: registros
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 21:46.