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

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Tomar datos de un archivo y ponerlos en un vector!!!
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: Tomar datos de un archivo y ponerlos en un vector!!!  (Leído 7,356 veces)
durasno


Desconectado Desconectado

Mensajes: 373


Ver Perfil
Re: Tomar datos de un archivo y ponerlos en un vector!!!
« Respuesta #10 en: 14 Julio 2012, 05:33 am »

Citar
en vez de declarar un puntero como int *a intenta declararlo como int* a. parece una tonteria, y para el compilador es lo mismo, pero de la segunda manera se ve claramente que a es una variable de tipo puntero a int. en cambio de la primera se puede pensar que *a es un puntero a int.
no se entiende lo que queres decir. En una declaracion de puntero cualquiera de las dos formas se entiende que es un puntero

Citar
si haces un printf("%d", a), el resultado sera un numero largo que indica la direccion de memoria a la que apunta
No, para saber la direccion a la que apunta se usa %p


Saludos


En línea

Ahorrate una pregunta, lee el man
xiruko


Desconectado Desconectado

Mensajes: 438


Ver Perfil
Re: Tomar datos de un archivo y ponerlos en un vector!!!
« Respuesta #11 en: 14 Julio 2012, 14:38 pm »

Citar
no se entiende lo que queres decir. En una declaracion de puntero cualquiera de las dos formas se entiende que es un puntero

si, para ti si, pero para alguien que esta aprendiendo puede llegar a confundir. al menos a mi me paso. como he dicho es una tonteria y es lo mismo, pero es quizas mas entendible para el usuario que aprende o al menos a mi me ayudo.

Citar
No, para saber la direccion a la que apunta se usa %p

de eso no tenia ni idea, pero poniendo el especificador de formato como si fuera un int, el compilador te manda un warning pero lo imprime sin problemas.


tan solo era como una introduccion a los punteros, sin tocar temas profundos ni tecnicismos innecesarios.


En línea

the_jocker

Desconectado Desconectado

Mensajes: 41



Ver Perfil
Re: Tomar datos de un archivo y ponerlos en un vector!!!
« Respuesta #12 en: 14 Julio 2012, 18:38 pm »

Bueno, gracias por responder, es cierto que puse mal las variables, ya lo corregi pero sigue sin descontar el stock, yo leo los datos, si coinciden lo escribo de nuevo y pongo el valor de la cantidad - lo que vendi, y sigo con el mismo valor del inicio, creo que asi no se modifican los datos, nose si ustedes me pueden decir como ustedes lo modificarian, o si esta mal como lo hice, posteo el codigo:
Código
  1. void DESCONTAR_STOCK(FILE *stock1, int diferencia1, int comp1)
  2. {
  3. int cod,cantidad;//nc: nueva cantidad del articulo
  4. float precio;
  5. char art[50];
  6. stock1 = fopen("Stock.dat","r+b");
  7. fread(&cod,sizeof(int),1,stock1);
  8. fread(&art,sizeof(art),1,stock1);
  9. fread(&cantidad,sizeof(int),1,stock1);
  10. fread(&precio,sizeof(float),1,stock1);
  11. while(!feof(stock1))
  12. {
  13. if(comp1 == cod)
  14. {
  15. fwrite(&cod,sizeof(int),1,stock1);
  16. fwrite(&art,sizeof(art),1,stock1);
  17. fwrite(&cantidad,sizeof(diferencia1),1,stock1);
  18. fwrite(&precio,sizeof(float),1,stock1);
  19. fseek(stock1,2,SEEK_END);
  20. }
  21. fread(&cod,sizeof(int),1,stock1);
  22. fread(&art,sizeof(art),1,stock1);
  23. fread(&cantidad,sizeof(int),1,stock1);
  24. fread(&precio,sizeof(float),1,stock1);
  25. }
  26. fclose(stock1);
  27. }
  28.  

Creo que el problema esta en como sobreescribo el dato, creo nose. Gracias.
En línea

durasno


Desconectado Desconectado

Mensajes: 373


Ver Perfil
Re: Tomar datos de un archivo y ponerlos en un vector!!!
« Respuesta #13 en: 14 Julio 2012, 20:44 pm »

Hola! es como decis vos, el problema esta en sobreescribir. Cuando vos lees algo de un archivo el cursor se desplaza, por lo tanto cuando quieras guardar vas a hacerlo a partir de donde esta posicionado el cursor. Lo que tendrias que hacer es volver a posicionarte cuando se cumple comp1 == cod. Tenes que usar fseek


Fijate si te sale sino te sigo ayudando. Saludos
En línea

Ahorrate una pregunta, lee el man
the_jocker

Desconectado Desconectado

Mensajes: 41



Ver Perfil
Re: Tomar datos de un archivo y ponerlos en un vector!!!
« Respuesta #14 en: 14 Julio 2012, 22:01 pm »

Gracias durasno por tomarte el tiempo de responder, si pruebo con el fseek y me cuesta ya que me confundo con la posición de la lectura del archivo, mira yo la ultima lectura que hago es el precio entonces si coincide al codigo con la variable comp1, con el fseek vuelvo una posición hacia atrás y pongo al principio el cursor y escribo la variable diferencia1, estoy en lo correcto?.
Código
  1. fseek(stock1,-sizeof(cantidad),SEEK_SET);
  2. fwrite(&diferencia1,sizeof(diferencia1),1,stock1);
  3. fseek(stock1,2,SEEK_END);
  4.  
En línea

durasno


Desconectado Desconectado

Mensajes: 373


Ver Perfil
Re: Tomar datos de un archivo y ponerlos en un vector!!!
« Respuesta #15 en: 16 Julio 2012, 01:52 am »

Q oxidado estoy con archivos :S. Entre la lectura de cod y art pone:

Código
  1. pos=ftell(fp); // ftell devuelve la posicion del cursor
pos es un entero. Luego si se cumple que es el codigo correcto pone:

Código
  1. if(comp1 == cod)
  2. {
  3.                        ns = cantidad - diferencia1;
  4.                        fseek(fp,pos-1,SEEK_SET);
  5. fwrite(&cod,sizeof(int),1,stock1);
  6. fwrite(art,sizeof(art),1,stock1);
  7. fwrite(&ns,sizeof(int),1,stock1);
  8. fwrite(&precio,sizeof(float),1,stock1);
  9. fseek(stock1,0,SEEK_END);
  10. }


Otra cosa, algo q no me habia dado cuenta es que tanto en la lectura como la escritura pones & delante de art, lo cual creo q causa un error ya que esta demas el &
En línea

Ahorrate una pregunta, lee el man
the_jocker

Desconectado Desconectado

Mensajes: 41



Ver Perfil
Re: Tomar datos de un archivo y ponerlos en un vector!!!
« Respuesta #16 en: 16 Julio 2012, 17:12 pm »

Gracias durasno, por responder, si probe el codigo y sigo en lo mismo, voy a para un rato ya, no consigo dar con la solución, pero voy a seguir estudiando el tema, la mayoria de los ejemplos que vi de la función fssek, son con estructuras, y no se nada de estructuras todavía, igual mi vieja cumple en agosto asi que todavia tengo tiempo de terminar el raglo, nunca mejor dicho terminar un regalo. Gracias igual durasno y a todos los que se dignaron ayudarme.
En línea

durasno


Desconectado Desconectado

Mensajes: 373


Ver Perfil
Re: Tomar datos de un archivo y ponerlos en un vector!!!
« Respuesta #17 en: 18 Julio 2012, 02:21 am »

Me parece bien que estudies acerca de estructuras ya que te facilita varias cosas.
Mire otra ves el codigo y me equivoque en pasarte esto:
Código
  1. fseek(stock,pos-1,SEEK_SET);
tenia que ser:
Código
  1. fseek(stock,pos-sizeof(int),SEEK_SET);
Hay q descontar sizeof(int) a pos ya que despues de leer el codigo del archivo, el cursor se desplaza 4bytes(o 2bytes)


Compile el programa y me anda bien, te dejo las modificaciones:
En el modulo de stock
Código
  1. case 2:
  2. if(op == 2)
  3. {
  4. printf("\n____________________________");
  5. printf("\nBienvenidoal modulo de stock: ");
  6. printf("\nEscoja la opcion: ");
  7. printf("\n1 - Alta de un articulo");
  8. printf("\n2 - Consulta de un articulo ");
  9. printf("\n3 - Descontar stock");
  10. printf("\n0 - Salir: ");
  11. scanf("%d",&st);
  12. printf("\n___________________________\n");
  13. switch(st)
  14. {
  15. case 0:
  16. return 0;
  17. break;
  18. case 1:
  19. if(st == 1)
  20. ALTAS_ARTICULOS(stock);
  21. break;
  22. case 2:
  23. if(st == 2)
  24. CONSULTA_ARTICULOS(stock);
  25. break;
  26. case 3:
  27.                             printf("\nIngrese codigo del articulo: ");
  28.                             scanf("%d",&cod);
  29.                             printf("\nIngrese la cantidad a descontar: ");
  30.                             scanf("%d",&cantidad);
  31.                             DESCONTAR_STOCK(stock, cantidad, cod);
  32.                             break;
  33. default:
  34. printf("\nLa opcion no es correcta ");
  35. break;
  36. }
  37. break;
  38. }

Funcion modificada:
Código
  1. void DESCONTAR_STOCK(FILE *stock1, int diferencia, int x)
  2. {
  3. int cod,cantidad,ns;//nc: nueva cantidad del articulo
  4. float precio;
  5. int pos;
  6. char art[50];
  7. stock1 = fopen("Stock.dat","r+b");
  8. fread(&cod,sizeof(int),1,stock1);
  9. pos=ftell(stock1);
  10. fread(art,sizeof(art),1,stock1);
  11. fread(&cantidad,sizeof(int),1,stock1);
  12. fread(&precio,sizeof(float),1,stock1);
  13. while(!feof(stock1))
  14. {
  15. if(x == cod)
  16. {
  17. ns = cantidad - diferencia;
  18. fseek(stock1,pos-sizeof(int),SEEK_SET);
  19. fwrite(&cod,sizeof(int),1,stock1);
  20. fwrite(art,sizeof(art),1,stock1);
  21. fwrite(&ns,sizeof(int),1,stock1);
  22. fwrite(&precio,sizeof(float),1,stock1);
  23. fseek(stock1,0,SEEK_END);
  24. }
  25. fread(&cod,sizeof(int),1,stock1);
  26. pos=ftell(stock1);
  27. fread(art,sizeof(art),1,stock1);
  28. fread(&cantidad,sizeof(int),1,stock1);
  29. fread(&precio,sizeof(float),1,stock1);
  30. }
  31. fclose(stock1);
  32. }


Saludos
En línea

Ahorrate una pregunta, lee el man
Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Cómo tomar atributos de archivo y mostrarlos con Echo SOLUCIONADO
Scripting
<ИΘZIЭ(ŦB> 8 6,988 Último mensaje 23 Agosto 2009, 05:50 am
por <ИΘZIЭ(ŦB>
Como tomar datos del PC « 1 2 »
PHP
Skeletron 15 12,742 Último mensaje 16 Abril 2010, 02:57 am
por Castg!
Eliminar datos de un vector
Programación C/C++
gatusko 1 13,034 Último mensaje 16 Septiembre 2010, 12:25 pm
por satu
Imposible tomar datos de una tabla [VBS]
Scripting
P4nd3m0n1um 1 2,078 Último mensaje 13 Julio 2012, 03:38 am
por Eleкtro
tomar fecha de subida de datos
PHP
basickdagger 2 1,468 Último mensaje 13 Noviembre 2013, 19:43 pm
por basickdagger
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines