Me pordían hechar una mano (programa en c++)

Iniciado por jaimeivan200, 5 Marzo 2012, 23:50 PM

0 Miembros y 1 Visitante están viendo este tema.

jaimeivan200

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

Citarinsertar(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;

Citarinsertar(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


#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 agradesería

archivo tronitos
Citaradfasdfsadfsadfsadfsafsf
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)

SXF

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.

jaimeivan200

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

     }//primer if

   }//while

}//fin ciclo