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

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Me pordían hechar una mano (programa en c++)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Me pordían hechar una mano (programa en c++)  (Leído 2,602 veces)
jaimeivan200

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Me pordían hechar una mano (programa en c++)
« en: 5 Marzo 2012, 23:50 pm »

Bueno ante todo, quiero decir que soy nuevo en el foro, y me disculpo por eso...
pero lamentablemente después de andar en la web ya no doy más :S (en ese punto donde me quiero dar cabezasos contra el teclado de mi ordenador xD)

bueno quiero pedirles ante todo una ayuda con un programa que tengo, armado aun sin terminar, ya que tiene unos errores y además unas complicaciones que se me dá

descripción sobre lo que hace mi programa

bueno mi programa esta basado en borland c++, lo que hace es que de un fichero de texto, llamado tronitos.txt, hay una serie de instrucciones que tiene que cumplir mi programa por ejemplo
función insertar (021,martillo,20,30,gt)
siendo los campos separados por comas
codigo
descripcion
peso
precio
lugar

según la instrucción dada es lo que hará mi programa, entre ellas esta buscar (); eliminar (); modificar ();

bueno, pues decía que del archivo tronitos.txt tengo que pasarlo a otro que diga maestro.txt <---nombre que le dado; la idea es que la opcion de insertar me inserte todos los registros pero como he utilizado uno de prueba un registro

Citar
insertar(021,martillo,20,30,gt)
mi programa funciona con solo una línea, pero al ponerle 2 lineas no lee la siguiente línea por ende no la inserta;

Citar
insertar(021,martillo,20,30,gt)
insertar(02,ASASD,40,3,gt)


bueno otro de los problemas que tengo es que tengo que colocarlo en cierta posición claro la posición ya la tengo pero no se como usarla para colocarla en dicha posición en el archivo... dejo mi codigo fuente y al final el archivo tronitos....
olvidaba mencionar que mi archivo solamente tiene que tener 77 registros; se que colacionarán algunas eso aun lo tengo que hacer, por método de hahs que claro aun no tengo idea de como hacerlo :S


Código:
#include <stdio.h>
#include <fstream.h>
#include <string.h>
#include <ctype.h>
#include <iostream.h>
#include <conio.h>

char arreglo[77];
int pos;

struct ingreso
{
   clrscr ();
   char codigo[5];
   char descripcion [25];
   char precio [20];
   char peso [10];
   char ciudad [10];
   };
struct ingreso reg;

FILE * entrada;
FILE * salida;
FILE * proceso;//aqui se guarda los procesos insertar, buscar, eliminar
char c[1];
char a[20];
char linea[100];
char linea2[30];
char linea3[10];

void lectura ()
{
do
{

//cout<<"Nombre del archivo\n";  //auno no funciona
//gets(a);
entrada = fopen ("tronitos.txt", "rt+");
if (entrada== NULL)
    {
         clrscr ();
      cout<<"el archivo no existe\n";
         getch ();
      }
   }while (entrada==NULL);

   proceso = fopen ("procesos.dat", "wb+");
   salida = fopen ("maestro.txt", "w+");
   clrscr ();
;
}


void cortar ()
{

strcpy (reg.codigo, "");
strcpy (reg.descripcion, "");
strcpy (reg.precio,"");
strcpy (reg.peso, "");
strcpy (reg.ciudad, "");
strcpy (linea3, "");
strcpy (linea2, "");
strcpy (linea, "");

int i=0, j=1, k=0;

fgets(linea,100,entrada);

while (i < strlen (linea))
{
   if (linea[i]!='(')
    {
      c[0]=linea[i];
       strcat (linea3, c);
       i++;
         j++;
      }
    else
    {
          i=strlen (linea);
      }
    }
while (j < strlen (linea))
{
   if(linea[j]!=')')
    {
      if (linea[j]!=',')
      {
         c[0]=linea[j];
         strcat (linea2,c);

         }//termina el segundo if que busca las comas ","

      else
      {
         k++;
         switch (k)
          {
            case 1: strcpy (reg.codigo,linea2);
            strcpy (linea2, "");
                     break;

            case 2: strcpy (reg.descripcion, linea2);
            strcpy (linea2, "");
                     break;

            case 3: strcpy (reg.precio,linea2);
            strcpy (linea2, "");
                     break;

            case 4: strcpy (reg.peso, linea2);
                    strcpy (linea2, "");
                    break;
            }//switch
         }//else interno que maneja switch
    }//termina el primer if que busca el parentesis abierto
       else
        {
         strcpy (reg.ciudad,linea2);
         strcpy (linea2, "");

         }
       j++;
   }//fin ciclo while
}




void lugar ()
{
unsigned int x, y=0, z=0;
char * cod = reg.codigo;

for (x=0; x<strlen(cod); x++)
{
   y=cod[x];
   z+=y;
   }//fin for

z-=9;
pos=z%77;
}//fin funcion lugar

void insertar ()
{
fseek (salida, pos*sizeof(struct ingreso), SEEK_SET);
fwrite(&reg, sizeof(reg),1,salida);



}



void menu ()
{


char palabra[40];
while (!feof(entrada))
{
   fgets (linea,100,entrada);
   if (strcmp (linea, "\n")!=0)
    {

      strcpy (palabra, linea3);

      if (strcmp (palabra, "insertar")==0)
      {
         insertar ();
         }//segundo if
         else
          {
            if (strcmp (palabra, "buscar")==0)
            {
            //buscar();
            }

            else
            {
               if (strcmp (palabra, "mostrar\n")==0)
                {
                  //mostrar ();
                  }
                  else
                  {
                     if (strcmp (palabra, "eliminar")==0)
                      {
                        //eliminar ();
                        }
                        else
                        {
                           if (strcmp (palabra,"modificar")==0)
                            {
                              //modificar ();
                              }

                           }
                     }
            }
            }
      }//primer if

   }//while

}//fin ciclo

int main()
{
long Nregistros;

lectura ();

cortar();
lugar ();
menu ();



fclose(entrada);
fclose (salida);
fclose (proceso);
getch ();
return 0;

si alguien me ayudaría enserio se los agradecería

archivo tronitos
Citar
adfasdfsadfsadfsadfsafsf
sdafsadfsdfsadfsdafsfsfsfsafsafsf
!"##$%&//(((((()))=?¡????)="!#$$%

insertar(021,martillo,20,30,gt)
insertar(022,bb,20,30,gt)
insertar(023,cc,20,30,gt)
insertar(024,dd,20,30,gt)
insertar(025,ee,20,30,gt)
insertar(026,ff,20,30,gt)
insertar(027,gg,20,30,gt)
insertar(028,hh,20,30,gt)
insertar(029,ii,20,30,gt)
insertar(030,jj,20,30,gt)
insertar(03122,kk,20,30,gt)
insertar(03222,ll,20,30,gt)
insertar(03322,mm,20,30,gt)
insertar(03422,nn,20,30,gt)
insertar(03522,oo,20,30,gt)
insertar(02236,pp,20,30,gt)
insertar(02237,qq,20,30,gt)
insertar(02382,ss,20,30,gt)
insertar(02239,tt,20,30,gt)
insertar(050,uu,20,30,gt)
insertar(025,vv,20,30,gt)
insertar(02402,zz,20,30,gt)
insertar(02412,aaa,20,30,gt)
insertar(02422,bbb,20,30,gt)
insertar(02432,ccc,20,30,gt)
insertar(02442,ddd,20,30,gt)
insertar(02452,eee,20,30,gt)
insertar(02462,ffff,20,30,gt)
insertar(02472,ggg,20,30,gt)
insertar(02482,hhh,20,30,gt)
insertar(02492,iii,20,30,gt)
insertar(02502,jjj,20,30,gt)
insertar(02512,kkk,20,30,gt)
insertar(02522,lll,20,30,gt)
insertar(02532,mmm,20,30,gt)
insertar(02542,nnn,20,30,gt)
insertar(02552,ooo,20,30,gt)
insertar(02562,ppp,20,30,gt)
insertar(02572,qqq,20,30,gt)
insertar(02582,sss,20,30,gt)
insertar(02592,ttt,20,30,gt)
insertar(02602,kkkk,20,30,gt)
insertar(02612,llllll,20,30,gt)
insertar(02622,mmmmmm,20,30,gt)
insertar(02632,nnnnnn,20,30,gt)
insertar(02642,jjjjjj,20,30,gt)
insertar(02652,wwwwww,20,30,gt)
insertar(02662,yyyyyy,20,30,gt)
insertar(02672,zzzzzz,20,30,gt)
insertar(02682,ññññññ,20,30,gt)
insertar(02692,xxxxxx,20,30,gt)
insertar(02702,oooooo,20,30,gt)
insertar(02712,aaaaaa,20,30,gt)
insertar(02722,eeeeee,20,30,gt)
insertar(02732,uuuuuu,20,30,gt)
insertar(02742,iiiiii,20,30,gt)
insertar(02752,vvvvvv,20,30,gt)
insertar(02762,cccccc,20,30,gt)
insertar(02772,rrrrrr,20,30,gt)
insertar(02782,ddddddddd,20,30,gt)


En línea

SXF

Desconectado Desconectado

Mensajes: 189



Ver Perfil WWW
Re: Me pordían hechar una mano (programa en c++)
« Respuesta #1 en: 7 Marzo 2012, 14:05 pm »

Bueno si no entendido mal el error esta en que el code no te lo lee línea a línea porque no utilizas esta funcion:
fscanf(f,"%s",palabra2);
Lo que hace es leer  linea a linea y avanza el puntero de lectura.


En línea

jaimeivan200

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Me pordían hechar una mano (programa en c++)
« Respuesta #2 en: 7 Marzo 2012, 22:13 pm »

bien, ante todo gracias SXF por contestar, vi una solución a mi problema, es que solamente llamaba a la función cortar una sola vez por eso no seguia en el procedimiento, la solucion que le di fue que al final del cierre del if (el primero) en la funcion menu hago el llamado de la función cortar para que luego me corte la segunda linea que tengo en lectura.... ;D y bueno al principio creí que ese era mi problema sin embargo, despues de pasar 2 dias fuera del programa a los 2 minutos di con la solucion, así que moraleja para esto: si no les funciona algo relajense y tomenlo con tranquilidad saludos compañeros y si a alguien le sirve dicho código esta alli para que lo utilizen

Código:
     }//primer if

   }//while

}//fin ciclo
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

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