Foros del Web » Programación para mayores de 30 ;) » Programación General »

Lenguaje C++

Estas en el tema de Lenguaje C++ en el foro de Programación General en Foros del Web. Como hago para grabar datos en un archivo usando fwrite Tengo algo hecho pero no me funciona bien. Estoy trabajando en borland. Si alguien tiene ...
  #1 (permalink)  
Antiguo 10/01/2005, 19:38
 
Fecha de Ingreso: marzo-2002
Ubicación: Salta Capital - Actualmente estudiando en Córdoba
Mensajes: 430
Antigüedad: 22 años, 8 meses
Puntos: 0
Lenguaje C++

Como hago para grabar datos en un archivo usando fwrite
Tengo algo hecho pero no me funciona bien.
Estoy trabajando en borland.
Si alguien tiene algun ejemplo que guarde datos en un archivo usando estructuras.
Gracias.
__________________
Nada es imposible, con un poco de esfuerzo se logran las cosas.-
  #2 (permalink)  
Antiguo 11/01/2005, 08:13
 
Fecha de Ingreso: marzo-2002
Ubicación: Salta Capital - Actualmente estudiando en Córdoba
Mensajes: 430
Antigüedad: 22 años, 8 meses
Puntos: 0
En Builder 6.0

Ya he encontrado como crear archivos, en www.programacionfacil.com

Pero ahora me ha surgido otro problema.
struct config //config.dat
{
int id;
char curso[30];
float prec_c;
float prec_m;
char mat[30];
int idmat;
};
void __fastcall TInsCur::Button1Click(TObject *Sender)
{
config aux;
FILE *f;
//Verificar que esten completos todos los campos.
if(Edit1->Text==""||Edit2->Text=="")
{
ShowMessage("Completar NOMBRE DEL CURSO y COSTO DEL CURSO");
}
else
{
f = fopen("config.txt","a+");
if(!f)
{ ShowMessage("El finchero no se puede abrir."); }
else
{
aux.id=fread(&aux.id, sizeof(config), 1, f)+1;
aux.curso=Edit1->Text;
aux.prec_c=Edit2->Text.ToInt();
aux.mat=Edit3->Text;
aux.prec_m=Edit4->Text.ToDouble();
aux.idmat=fread(&aux.idmat, sizeof(config), 1, f)+1;
fwrite(&aux, sizeof(aux), 1, f);

}
fclose(f);
}
}

Tengo 4 edits uno para curso, precio_c, mat, prec_m

Ahora me tira un error el compilador cuando quiero ejecutar, me dice que en la linea de aux.curso y aux.mat me sale el siguiente error.


[C++ Error] Unit2.cpp(38): E2277 Lvalue required
[C++ Error] Unit2.cpp(40): E2277 Lvalue required
__________________
Nada es imposible, con un poco de esfuerzo se logran las cosas.-
  #3 (permalink)  
Antiguo 11/01/2005, 16:26
 
Fecha de Ingreso: marzo-2002
Ubicación: Salta Capital - Actualmente estudiando en Córdoba
Mensajes: 430
Antigüedad: 22 años, 8 meses
Puntos: 0
Ayuda Por Favorrrr
__________________
Nada es imposible, con un poco de esfuerzo se logran las cosas.-
  #4 (permalink)  
Antiguo 11/01/2005, 16:44
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años, 6 meses
Puntos: 74
¿Edit1->Text() y Edit3->Text()?

Estaría muy bien saber cual es la linea 38 y cual la 40, ahi no esta todo el codigo de unit2.cpp, ¿verdad?
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO

Última edición por Eternal Idol; 11/01/2005 a las 16:48
  #5 (permalink)  
Antiguo 11/01/2005, 19:33
 
Fecha de Ingreso: marzo-2002
Ubicación: Salta Capital - Actualmente estudiando en Córdoba
Mensajes: 430
Antigüedad: 22 años, 8 meses
Puntos: 0
La linea 38 y 40 son las siguientes

aux.curso=Edit1->Text;
aux.mat=Edit3->Text;
__________________
Nada es imposible, con un poco de esfuerzo se logran las cosas.-
  #6 (permalink)  
Antiguo 12/01/2005, 01:02
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años, 6 meses
Puntos: 74
Si, fue lo que me imagine, probaste de poner Edit1->Text() y Edit3->Text(), sino me equivoco esas son funciones y no miembros de la clase.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #7 (permalink)  
Antiguo 12/01/2005, 06:30
 
Fecha de Ingreso: marzo-2002
Ubicación: Salta Capital - Actualmente estudiando en Córdoba
Mensajes: 430
Antigüedad: 22 años, 8 meses
Puntos: 0
Hola eternal, probe como me dijiste y me salen estos erroes

[C++ Error] Unit2.cpp(38): E2314 Call of nonfunction
[C++ Error] Unit2.cpp(40): E2314 Call of nonfunction

Lineas 38 y 40

aux.curso=Edit1->Text();
aux.mat=Edit3->Text();

Que es lo que pasa
__________________
Nada es imposible, con un poco de esfuerzo se logran las cosas.-
  #8 (permalink)  
Antiguo 12/01/2005, 07:36
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años, 6 meses
Puntos: 74
Recien lei el codigo completo, claro que no funciona, estas tratando de asignar un puntero a un array de cadenas.

podes probar asi, pero tene en cuenta que si el texto es mayor a 30 caracteres (los que les asignaste a esos arrays) va a dar problemas:

strcpy(aux.curso, Edit1->Text);
strcpy(aux.mat, Edit3->Text);

Tambien podrias usar buffers dinamicos, seria lo ideal.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #9 (permalink)  
Antiguo 12/01/2005, 07:49
 
Fecha de Ingreso: marzo-2002
Ubicación: Salta Capital - Actualmente estudiando en Córdoba
Mensajes: 430
Antigüedad: 22 años, 8 meses
Puntos: 0
Gracias eternal pero sigue sin funcionar me tira el siguiente error ahora

[C++ Error] Unit2.cpp(40): E2034 Cannot convert 'AnsiString' to 'const char *'

[C++ Error] Unit2.cpp(40): E2342 Type mismatch in parameter '__src' (wanted 'const char *', got 'AnsiString')

Tengo que cambiar alguna propiedad del edit¿?
__________________
Nada es imposible, con un poco de esfuerzo se logran las cosas.-
  #10 (permalink)  
Antiguo 12/01/2005, 07:58
 
Fecha de Ingreso: marzo-2002
Ubicación: Salta Capital - Actualmente estudiando en Córdoba
Mensajes: 430
Antigüedad: 22 años, 8 meses
Puntos: 0
AL FINNNN

strcpy(aux.curso, Edit1->Text.c_str());

Asi quedaria la cadena para que no me largue error.
Gracias por colaborar.
__________________
Nada es imposible, con un poco de esfuerzo se logran las cosas.-
  #11 (permalink)  
Antiguo 12/01/2005, 12:06
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años, 6 meses
Puntos: 74
Si, es que como pensaba al principio necesitaba una funcion para devolver la cadena, pero no era Text je. De cualquier manera recorda que si la cadena tiene mas de 29 bytes se va a producir un error.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
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 14:27.