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

Duda al escribir y leer archivos

Estas en el tema de Duda al escribir y leer archivos en el foro de C/C++ en Foros del Web. Estoy aprendiendo la forma de escribir archivos y leerlos en el Turbo C++. Estoy utilizando struct para ello. No tengo inconvenientes cuando se cuantos datos ...
  #1 (permalink)  
Antiguo 12/09/2009, 11:01
 
Fecha de Ingreso: septiembre-2009
Mensajes: 1
Antigüedad: 14 años, 7 meses
Puntos: 0
Pregunta Duda al escribir y leer archivos

Estoy aprendiendo la forma de escribir archivos y leerlos en el Turbo C++.
Estoy utilizando struct para ello. No tengo inconvenientes cuando se cuantos datos quiero guardar. Pero me llego la curiosidad de como hacerlo sin un array.

No es el codigo completo pero creo que el fragmento serviria para lo que intendo hacer.

Primero declaro
Código:
#include <iostream.h>
#include <conio.h>
#include <string.h>
#include <stdio.h>
struct persona
{
	char dni[9];
	char nom[30];
	float imp;
};
void leerperso();
void cargperso(struct persona*);
void main()
{
	struct persona client[10];
        cargperso(client);

Para escribir uno por uno utilizo esta funcion:
Código:
cargperso (struct persona*p)
{
  int i=0;
while(i<10)
 {
 cout<<"Cliente "<<i;
 cout<<"DNI "; cin>>p[i].dni;
 cout<<"Nombre "; cin>>p[i].nom;
 cout<<"Importe "; cout<<(p[i].imp=0);
 escribirperso(p);
 i++;
 }
}

void escribirperso(struct persona*p)
{
	FILE *stream;
	stream=fopen("C:\\clie.dat","wb+");
	fwrite(p, sizeof (struct persona), 10, stream);
	fclose(stream);
}
Como ven indica que escriba 10 veces como lo indica el corte de control de cargperso. Quiero modificar la variable del struct ("p/client") para que sea simple y no un array, el corte de control de cargperso terminaria al escribir "fin" y sacar ese contador.
No se como modificar el fwrite para que me lo guarda 1x1 no importa cuantos datos ponga.


De esta forma puedo leer los datos del struct (archivo) sin la necesidad de un FOR/conocimientos de cuantos pongo
Código:
void leerperso()
{
	FILE *stream;
	struct persona to;
	stream=fopen("C:\\clie.dat","rb");
	while(fread(&to, sizeof to, 1,stream)==1)
	{
	cout<<"\nDNI "<<to.dni<<" Nombre "<<to.nom<<" Importe "<<to.imp<<endl;
	}
	fclose(stream);
}
Algún recomendacion para un novato???
Desde ya gracias de antemano...
  #2 (permalink)  
Antiguo 13/09/2009, 16:40
Avatar de fradve  
Fecha de Ingreso: abril-2009
Mensajes: 157
Antigüedad: 15 años
Puntos: 7
De acuerdo Duda al escribir y leer archivos

Mediante el siguiente código puedes ingresar un número ilimitado de personas, y desplagarlas en la pantalla, Espero te sea de ayuda...


Código c++:
Ver original
  1. #include<iostream.h>
  2. #include<conio.h>
  3. #include<stdio.h>
  4.  
  5. FILE *pfile;
  6.  
  7.  
  8. struct persona
  9. {
  10.   char nombre[10];
  11.   int edad;
  12.   char direccion[30];
  13.   char telefono[10];
  14. }datos;
  15.  
  16. void escribir()
  17. {
  18.   pfile=fopen("persona.dat","ab+");
  19.  
  20.   clrscr();
  21.   cout << "DATOS PERSONALES\n\n";
  22.   cout << "\nNombre: "; cin >> datos.nombre;
  23.   cout << "\nEdad: "; cin >> datos.edad;
  24.   cout << "\nDireccion: "; cin >> datos.direccion;
  25.   cout << "\nTelefono: "; cin >> datos.telefono;
  26.   fwrite(&datos,sizeof(datos),1,pfile);
  27.   fclose(pfile);
  28. }
  29.  
  30. void leer()
  31. {
  32.   pfile=fopen("persona.dat","rb");
  33.   clrscr();
  34.   cout << "DATOS PERSONALES\n\n";
  35.   cout << "\nNombre\t\tEdad\tDirecci¢n\t\tTelefono";
  36.  
  37.   fread(&datos,sizeof(datos),1,pfile);
  38.   while(!feof(pfile))
  39.   {
  40.     cout << "\n" << datos.nombre << "\t\t" << datos.edad << "\t"
  41.      <<datos.direccion << "\t\t\t" << datos.telefono;
  42.     fread(&datos,sizeof(datos),1,pfile);
  43.   }
  44.   fclose(pfile);
  45.   getch();
  46. }
  47.  
  48. void menu()
  49. {
  50.   char key;
  51.  
  52.   do
  53.   {
  54.     clrscr();
  55.     cout << "\t\t\t\tMENU PRINCIPAL";
  56.     cout << "\n\t\t\t[1] INGRESAR";
  57.     cout << "\n\t\t\t[2] LISTAR";
  58.     cout << "\n\t\t\t[3] SALIR";
  59.     cout << "\n\n\t\t\tOPCION:";
  60.     key=getche();
  61.     switch(key)
  62.     {
  63.       case '1': escribir(); break;
  64.       case '2': leer();
  65.     }
  66.   }while(key!='3');
  67. }
  68.  
  69. void main()
  70. {
  71.   menu();
  72. }
__________________
En programación hay mil y un formas de hacer lo mismo...
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 22:31.